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 }

 

转载于:https://www.cnblogs.com/Royzzzzz/p/11070008.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值