1.起泡排序
Posted royzzzzz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.起泡排序相关的知识,希望对你有一定的参考价值。
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
以上是关于1.起泡排序的主要内容,如果未能解决你的问题,请参考以下文章