本文已参与「新人创作礼」活动,一起开启掘金创作之路
冒泡排序
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);
}
}
3、性能分析
时间复杂度:O(n^2^) 空间复杂度:O(1) 稳定性:稳定