常见排序算法流程分析及其实现代码(四)

177 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

冒泡排序

1、执行流程

首先第一个元素和第二个元素比较,如果第一个元素较大,则交换两者位置,否则不交换;继续比较第二个元素和第三个元素,第三个与第四个元素,直到最大的元素被放在了最后面,一趟冒泡排序完成。经过多趟冒泡排序后,最终的序列即为有序序列

原始序列:49 38 65 97 76 13 27 49 (序列中有两个49,其中一个加粗加以区分并可以验证该排序算法稳定性)

1)第一趟

49>38,交换 38 49 65 97 76 13 27 49

49<65,不交换 38 49 65 97 76 13 27 49

65<97,不交换 38 49 65 97 76 13 27 49

97>76,交换 38 49 65 76 97 13 27 49

97>13,交换 38 49 65 76 13 97 27 49

97>27,交换 38 49 65 76 13 27 97 49

97>49,交换 38 49 65 76 13 27 49 97

至此一趟冒泡排序完成,最大的数97被放在了最后

2)第二趟

38<49,不交换

49<65,不交换

65<76,不交换

76>13,交换 38 49 65 13 76 27 49 97

76>27,交换 38 49 65 13 27 76 49 97

76>49,交换 38 49 65 13 27 49 76 97

至此完成第二趟排序,最大的数76被放在了最后,继续完成后续排序即可得到最终序列

2、执行代码

public class BubbleSort {

	public static void sort(int num[], int n) {
		int i, j, k, flag, temp;
		for(i = n-1; i >= 1; i--) {
			flag = 0;
			for(j = 1; j <= i; j++) {
				if(num[j-1] > num[j]) {
					temp = num[j];
					num[j] = num[j-1];
					num[j-1] = temp;
					flag = 1;
				}
			}
			if(flag == 0) {
				return;
			}
			System.out.print("第"+(n-i)+"趟:");
			for(k = 0; k < num.length; k++) {
				System.out.print(num[k] + " ");
			}
			System.out.println();
		}
	}

	public static void main(String[] args) {
		int mynum[] = {49, 38, 65, 97, 76, 13, 27, 49};
		sort(mynum, mynum.length);	
	}
}

20200901112934544.png

3、性能分析

时间复杂度:O(n^2^) 空间复杂度:O(1) 稳定性:稳定