冒泡排序
稳定性
//冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,是不会再交换的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。
代码
普通代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| void BubbleSort(int *arr,int size) { assert(arr&&size) for(int i=0;i<size-1;i++) { for(int j=0;j<size-1-i;j++) { if(arr[j] > arr[j+1]) { int tmp = array[j]; array[j] = array[j+1]; array[j+1] = tmp; } } } }
|
优化代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| void BubbleSort_Optimize_1(int *arr,int size) { assert(arr&&size) if(size=1) return 0; bool flag=0; for(int i=0;i<size-1;i++) { flag=1; for(int j=0;j<size-1-i;j++) { if(arr[j] > arr[j+1]) { int tmp = array[j]; array[j] = array[j+1]; array[j+1] = tmp; flag =0; } } if(flag) break; } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| void BubbleSort_Optimize_2(int *arr,int size) { assert(arr&&size) if(size=1) return 0; bool flag=0; int index=size-1; int max_index=0; for(int i=0;i<size-1;i++) { flag=1; max_index=0; for(int j=0;j<size-1-i;j++) { if(arr[j] > arr[j+1]) { int tmp = array[j]; array[j] = array[j+1]; array[j+1] = tmp; flag =0; max_index=j; } } if(flag) break; } }
|
标记理解(flag)