内部排序算法的比较

一、性质对比

    补充:   折半插入排序             O(n)      O(n^2)     O(n^2)      O(1)          是

折半插入排序和直接插入排序的异同:

相同点:

排序总趟数取决于元素的个数n,都是n-1趟;

元素的移动次数都取决于初始序列,两者相同;

辅助空间的都是常数级,O(1)。

不同点:              

  查找插入位置  比较次数
折半插入排序    折半查找  O(nlog n)(以2为底)
直接插入排序顺序查找

O(n)~ O(n^2)

(1)稳定性

插冒归,很稳定;

(2)时间复杂度

选冒插,很方(平均情况);快归堆,nlog。

(3)空间复杂度

快速排序为O(log n)(以2为底),二路归并排序O(n),基数排序为O(r)。其它为

O(1)。

快速排序最坏空间复杂度为O(n)

(4)适用存储结构

仅适用于顺序存储:折半插入排序、希尔排序、快速排序和堆排序。

既适用于顺序存储又适用于链式存储:直接插入排序、冒泡排序、简单选择排序、归并排序和基数排序。

(5)排序算法的比较次数和移动次数(最好情况、最坏情况)

1)直接插入排序

比较次数:最好情况下,需要的比较次数为 n-1;最坏情况下,所需的比较次数为n(n-1)/2。

移动次数:移动次数取决于表的初始状态。

2)冒泡排序

最好情况下,比较次数为n-1,移动次数为0;最坏情况下(初始序列为逆序时),需要n-1趟排序,第i趟排序要进行n-i次关键字比较,每次比较后都必须移动元素3次来交换元素位置。

3)简单选择排序

移动次数:元素移动的操作次数很少,不会超过3(n-1)次(O(n)),其中最好情况下,移动0次,此时对应的表已经有序;

比较次数:但是元素间比较的次数与序列的初始状态无关,始终是n(n-1)/2次。(O(n^2))

(6)与初始状态无关

排序过程中的比较次数与序列初始状态无关的是简单选择排序(n(n-1)/2)、基数排序、归并排序。

排序趟数与序列的原始状态无关的排序方法是直接插入排序、简单选择排序、基数排序。

直接插入排序和简单选择排序的排序趟数都是n-1。

折半插入排序的总比较次数一定,是O(nlog n)。

(7)每一趟可以确定一个元素的最终位置

堆排序、冒泡排序、简单选择排序(确定一个最大值或最小值) --确定绝对位置

快速排序(每一趟确定一个元素(随机)的最终位置)--确定绝对位置

直接插入排序并不能一趟确定一个绝对位置,每次都在确定一个元素的相对位置

(8)其它

快速排序是所有内部排序算法中平均性能最优的排序算法。

基数排序不需要关键字的比较。

最坏情况下,空间复杂度为O(n)的是归并排序和快速排序。

平均情况下,空间复杂度为O(n)的是归并排序

基数排序必须是整数.

在基本有序的情况下,直接插入排序的时间复杂度为O(n),

归并排序不管怎么样,时间复杂度都是O(n log n);

快速排序,在基本有序的情况下,是最坏情况,O(n^2)。

在最好情况下,时间复杂度可以到达线性时间的有冒泡排序和直接插入排序,都是O(n)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值