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

本文详细阐述了冒泡排序的工作原理,包括时间复杂度、稳定性特性及代码实现,并提供了优化思路,帮助开发者掌握这一基本排序算法。

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   

转载于:https://www.cnblogs.com/pangxiaodong/archive/2011/06/07/2074372.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值