本帖最后由 粉色壁纸 于 2011-10-23 22:23 编辑
一、排序原理
(1111)直接插入排序
基本原理:这是最简单的一种排序方法,它的基本操作是将一个记录插入到已排好的
有序表中,从而得到一个新的、记录增 1 的有序表。
效率分析:该排序算法简洁,易于实现。从空间来看,他只需要一个记录的辅助空间,
即空间复杂度为 O(1).从时间来看,排序的基本操作为:比较两个关键字的大小和移动记
录。当待排序列中记录按关键字非递减有序排列(即正序)时,所需进行关键字间的比较次
数达最小值 n-1,记录不需移动;反之,当待排序列中记录按关键字非递增有序排列(即逆
序)时,总的比较次数达最大值(n+2)(n-1)/2,记录移动也达到最大值(n+4)(n-2)/2.由于
待排记录是随机的,可取最大值与最小值的平均值,约为 n²/4.则直接插入排序的时间复杂
度为 O(n²). 由此可知,直接插入排序的元素个数 n 越小越好,源序列排序度越高越好
(正序时时间复杂度可提高至 O(n))。插入排序算法对于大数组,这种算法非常慢。但是
对于小数组,它比其他算法快。其他算法因为待的数组元素很少,反而使得效率降低。插入
排序还有一个优点就是排序稳定。
(2222)折半插入排序
基本原理:折半插入是在直接插入排序的基础上实现的,不同的是折半插入排序在将
数据插入一个有序表时,采用效率更高的“折半查找”来确定插入位置。
效率分析:由上可知该排序所需存储空间和直接插入排序相同。从时间上比较,折半
插入排序仅减少了关键字间的比较次数,为 O(nlogn)。而记录的移动次数不变。因此,折半
查找排序的时间复杂度为 O(nlogn)+O(n²)
= O(n²)。排序稳定。 |