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.起泡排序的主要内容,如果未能解决你的问题,请参考以下文章

起泡排序(Bubble sort)

1.起泡排序

第二章 向量(e)起泡排序

交换排序_冒泡排序_优化2(双向起泡)

类模板,链表,直接插入排序,选择排序,起泡排序

Java 数组 排序实例--起泡法