1.1.初始版本
1 void bubble_sort_1(int *arr,int length) {
2 int i, j;
3 for (i = 0; i < length; i++) {
4 for (j = 0; j < length-i-1; j++) {
5 if (arr[j] > arr[j + 1])
6 std::swap(arr[j], arr[j + 1]);
7 }
8 }
9 }
1.2.改进1:如果在进行循环到了某一步的时候,发现总体已经有序了,则直接结束循环。
1 void bubble_sort_2(int a[], int n) {
2 for (bool sorted = false; sorted = !sorted; n--) {
3 for (int i = 1; i != n; i++) {
4 if(a[i - 1]> a[i]){
5 std::swap(a[i - 1], a[i]);
6 sorted = false;
7 }
8 }
9 }
10 }
1.3.改进2:记录每次最右边的逆序点(该点后半部分已经有序),则可以从该点往左边进行再排序,省去了已经有序再排序的部分步骤。
1 void bubble_sort_3(int a[], int n) {
2 int last = 0;
3 int a_border = n;
4 for (bool sorted = false; sorted = !sorted; a_border--) {
5 for (int i = 1; i != a_border; i++) {
6 if (a[i - 1] > a[i]) {
7 std::swap(a[i - 1], a[i]);
8 sorted = false;
9 last = i;
10 }
11 }
12 a_border = last;
13 }
14 }