算法熟记-排序系列-冒泡排序

1. 简述

    假设待排序数组为 int array[], 数组长度为n。
    第1趟在array[0]-array[n-1]范围内,从后向前依次比较,把较小交换到前面,最终最小的元素会站在array[0]里面。
    第2趟在array[1]-array[n-1]范围内,··· ,最终第二小的元素会站在array[1]里面。
    ...
    第n-1趟,在array[n-2]-array[n-1]范围内,··· , 最终第n-1小的元素会站在array[n-2]里面。
    至此,排序结束。

2. 复杂度

   时间复杂度T=O(n*n),而且如果按照上面的算法来实现,最坏、最好以及平均的复杂度都是O(n*n),因为即使数组已经排序好了,还会继续比较下去。因此,如果在某一趟排序过程中,发现已经有序了,那么就可以终止排序了,即使得时间最好的时间复杂度T = O(n)。
   稳定性属于稳定的排序。

3. 代码   

void bubble_sort(int array[], int len) {
  
for(int i=0; i<len-1; i++) {
    
bool sorted = true;
    
for(int j=len-1; j>i; j--) {
      
if(array[j] < array[j-1]) {
        sorted 
= false;
        swap(array[j], array[j
-1]); 
      }
    }
    
if(sorted == true
      
break;
  }
}

4. 参考资料

    维基百科-冒泡排序   http://en.wikipedia.org/wiki/Bubble_sort   

posted @ 2011-06-07 15:50  xiaodongrush  阅读(318)  评论(1编辑  收藏  举报