C语言一趟冒泡交换最小值,C语言编程实例-排序算法演示冒泡法

《C语言编程实例-排序算法演示冒泡法》由会员分享,可在线阅读,更多相关《C语言编程实例-排序算法演示冒泡法(3页珍藏版)》请在人人文库网上搜索。

1、C语言-编程实例-排序算法演示:冒泡法 冒泡排序的算法分析与改进 交换排序的基本思想是:两两比较待排序记录的关键字,发现两个记录的次 序相反时即进行交换,直到没有反序的记录为止。应用交换排序基本思想的主要排序方法有:冒泡排序和快速排序。 冒泡排序1、排序方法将被排序的记录数组 R1.n 垂直排列,每个记录 Ri 看作是重量为Ri.key 的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组 R: 凡扫描到违反本原则的轻气泡,就使其向上 飘浮 。如此反复进行,直到最后任 何两个气泡都是轻者在上,重者在下为止。(1) 初始R1.n 为无序区。(2) 第一趟扫描 从无序区底部向上依次比较相邻的。

2、两个气泡的重量,若发现轻者在下、重者在上,则交换二者的位置。即依次比较(Rn , Rn-1) , (Rn-1 , Rn-2),, (R2 ,R1) ;对于每对气泡 (Rj+1 ,Rj) ,若 Rj+1.key=i;j-) /对当前无序区 Ri.n 自下向上扫描if(Rj+1.keyRj.key)/ 交换记录R0=Rj+1 ; /R0 不是哨兵,仅做暂存单元Rj+1=Rj ;Rj=R0 ;exchange=TRU;E / 发生了交换,故将交换标志置为真if(!exchange) / 本趟排序未发生交换,提前终止算法return ; /endfor(外循环 ) /BubbleSort4、算法分析(。

3、1)算法的最好时间复杂度 若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数C和记录移动次数M均达到最小值:Cmin=n-1Mmin=0。冒泡排序最好的时间复杂度为 O(n) 。(2) 算法的最坏时间复杂度若初始文件是反序的,需要进行 n-1 趟排序。每趟排序要进行 n-i 次关键字 的比较(1 i Wn-1),且每次比较都必须移动记录三次来达到交换记录位置。在 这种情况下,比较和移动次数均达到最大值:Cmax=n(n-1)/2=O(n2)Mmax=3n(n-1)/2=O(n2) 冒泡排序的最坏时间复杂度为 O(n2)。(3) 算法的平均时间复杂度为 O(n2) 虽然冒泡排序。

4、不一定要进行 n-1 趟,但由于它的记录移动次数较多,故平均时间性能比直接插入排序要差得多。(4) 算法稳定性 冒泡排序是就地排序,且它是稳定的。5、算法改进 上述的冒泡排序还可做如下的改进:(1) 记住最后一次交换发生位置 lastExchange 的冒泡排序 在每趟扫描中, 记住最后一次交换发生的位置 lastExchange ,(该位置之前的相邻记录均已有序)。下一趟排序开始时,R1.lastExchange-1 是有序区,RlastExchange.n 是无序区。这样,一趟排序可能使当前有序区扩充多个记录, 从而减少排序的趟数。具体算法【参见习题】。(2) 改变扫描方向的冒泡排序 冒泡。

5、排序的不对称性 能一趟扫描完成排序的情况:只有最轻的气泡位于 Rn 的位置,其余的气泡均已排好序, 那么也只需一趟 扫描就可以完成排序。【例】对初始关键字序列 12,18,42,44,45,67,94,10 就仅需一趟扫 描。需要 n-1 趟扫描完成排序情况: 当只有最重的气泡位于 R1 的位置,其余的气泡均已排好序时,则仍需做 n-1 趟扫描才能完成排序。【例】对初始关键字序列: 94,10,12,18,42,44,45,67 就需七趟扫描。 造成不对称性的原因每趟扫描仅能使最重气泡 下沉 一个位置,因此使位于顶端的最重气泡下沉 到底部时,需做 n-1 趟扫描。改进不对称性的方法 在排序过程中交替改变扫描方向,可改进不对称性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值