烧伤用什么药最好:冒泡排序的算法分析、改进

来源:百度文库 编辑:偶看新闻 时间:2024/04/28 06:03:14
 
  网站工具
 
管 理
flash插件下载
 
 
  
晚上好,好好珍惜!  首页 概论 线性表 栈和队列 串 多维数组 广义表 树 图 排序
查找 文件
 
 
  
排序基本概念
基本概念
插入排序
直接插入排序
希尔排序
交换排序
冒泡排序
快速排序
选择排序
直接选择排序
堆排序
归并排序
归并排序
分配排序
箱排序
基数排序
各种内部排序方法
各种内部排序方法的比较和选择 
 上一页 4、算法分析
(1)算法的最好时间复杂度
     若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数C
和记录移动次数M均达到最小值:
        Cmin=n-1
        Mmin=0。
     冒泡排序最好的时间复杂度为O(n)。(2)算法的最坏时间复杂度
     若初始文件是反序的,需要进行n-1趟排序。每趟排序要进行n-i次关键字的比较(1
≤i≤n-1)
,且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数?
锏阶畲笾担?
        Cmax=n(n-1)/2=O(n2)
        Mmax=3n(n-1)/2=O(n2)
     冒泡排序的最坏时间复杂度为O(n2)。(3)算法的平均时间复杂度为O(n2)
     虽然冒泡排序不一定要进行n-1
趟,但由于它的记录移动次数较多,故平均时间性能比直接插入排序要差得多。(4)算法稳定性
     冒泡排序是就地排序,且它是稳定的。5、算法改进
     上述的冒泡排序还可做如下的改进:
(1)记住最后一次交换发生位置lastExchange的冒泡排序
  在每趟扫描中,记住最后一次交换发生的位置lastExchange
,(该位置之前的相邻记录均已有序)。下一趟排序开始时,R[1..lastExchange-1]
是有序区,R[lastExchange..n]
是无序区。这样,一趟排序可能使当前有序区扩充多个记录,从而减少排序的趟数。具体?
惴ā静渭疤狻俊?(2) 改变扫描方向的冒泡排序
 ①冒泡排序的不对称性
  能一趟扫描完成排序的情况:
     只有最轻的气泡位于R[n]
的位置,其余的气泡均已排好序,那么也只需一趟扫描就可以完成排序。
【例】对初始关键字序列12,18,42,44,45,67,94,10就仅需一趟扫描。
需要n-1趟扫描完成排序情况:
     当只有最重的气泡位于R[1]的位置,其余的气泡均已排好序时,则仍需做n-1
趟扫描才能完成排序。
【例】对初始关键字序列:94,10,12,18,42,44,45,67就需七趟扫描。
 
②造成不对称性的原因
  每趟扫描仅能使最重气泡"下沉"一个位置,因此使位于顶端的最重气泡下沉到底部时?
枳鰊-1趟扫描。 ③改进不对称性的方法
     在排序过程中交替改变扫描方向,可改进不对称性。具体算法【参见习题】。 上一页