基本排序算法及分析(二):冒泡排序

冒泡排序与改进版
本文介绍了冒泡排序算法及其改进版本。原始冒泡排序的时间复杂度为O(N^2),改进后的版本通过引入哨兵标志减少不必要的比较,提高部分场景下的效率。

冒泡排序和改进的冒泡排序

 1 /**/ /*-------------------------------------------------------------------------------------------
 2Bubble_sort.h
 3冒泡排序: 时间复杂度为O(N^2)
 4改进的冒泡排序: 时间复杂度仍为O(N^2)
 5    一般的冒泡排序方法有可能会在已经排好序的情况下继续比较,改进的冒泡排序
 6    设置了一个哨兵flag,如果一次for循环没有进行交换,则元素已经排好序,由哨兵控制退出循环。
 7-------------------------------------------------------------------------------------------*/

 8 #ifndef BUBBLE_SORT_H
 9 #define  BUBBLE_SORT_H
10
11 #include  " typedef.h "
12 #include  " swap.h "
13
14 // 冒泡排序
15 void  Bubble_sort(T  * a,  int  n)
16 {
17    for(int i=n-1; i != 0--i)
18        for(int j=0; j != i; ++j)
19            if(a[j+1< a[j]) swap(a[j+1],a[j]);
20}

21
22 // 改进的冒泡排序
23 void  Improved_Bubble_sort(T  * a,  int  n)
24 {    
25    for(int i=n-1; i != 0--i)
26    {
27        bool flag = true;
28        for(int j=0; j != i; ++j) //这一趟遍历如果没有交换,则已完成排序
29            if(a[j+1< a[j])  { swap(a[j+1],a[j]); flag = false; }
30        if(flag == truebreak;
31    }

32}

33
34 #endif



幸运草 2009-04-22 16:46 发表评论

转载于:https://www.cnblogs.com/liyuxia713/archive/2009/04/22/2540781.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值