插入排序、交换排序、选择排序、归并排序简单分析

1.插入排序

基本思想:每次将一个待排序的记录按其关键字大小插入到前面已排好序的子序列中,直到全部记录插入完成。

(1)直接插入排序:把括号里的看成已经排好序的,把每次加入的一个新的数据插入到相应的位置,使括号里的数据仍有序。

 n个元素进行比较时,插入元素的操作进行了n-1趟,每次比较i-1次。

时间复杂度:平均情况O(n²),最好情况O(n),最坏情况O(n²)

空间复杂度:O(1)

稳定性:稳定

(2)希尔排序:把相隔某个增量的记录组成一个子表,对各个子表进行直接插入排序,使其有序;第二次增量要小于第一次,以此轮推,最后一次增量为1,即最后一次是对全体记录进行直接插入排序。

时间复杂度:最好情况O(n),最坏情况O(n²),时间复杂度依赖于增量序列的函数

空间复杂度:O(1)

稳定性:不稳定

2.交换排序

根据序列中两个元素关键字的比较结果来交换这两个记录在序列中的位置。

(1)冒泡排序:每次从前往后两两比较相邻元素值,如果前一个元素小则进行交换,一直将序列比较完,第一趟结束,最大值在最后。第二趟时最后一个最大值不参与,重复第一趟的操作,一直进行n-1趟,所有元素就排好序了。

时间复杂度:平均情况O(n²),最好情况O(n),最坏情况O(n²)

空间复杂度:O(1)

稳定性:稳定

(2)快速排序:取第一个元素为枢轴,使用双指针,通过一趟排序将待排序表划分为左中右三部分,左边均小于枢轴,中间部分为枢轴,右边部分大于枢轴,然后分别对左右两部分进行快速排序。一直重复上述步骤,直到每部分只有一个元素或为空,这样就得到了有序的排序表。

时间复杂度:平均情况O(nlog₂n),最好情况O(nlog₂n),最坏情况O(n²)

空间复杂度:O(log₂n)

稳定性:不稳定

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

快速排序不适用于原本有序或基本有序。

3.选择排序

(1)简单选择排序:第一趟选择全部里最小的元素与第一个元素交换,第二趟选择第一个后面的n-1个元素里最小的与第二个元素交换,每一趟排序确定一个元素的最终位置,以此轮推,第i趟选择第i个后的n-i+1里的最小的与第i个元素交换,直到n-1趟完成剩下最后一个元素,排序就完成了。

时间复杂度:平均情况O(n²),最好情况O(n²),最坏情况O(n²)

空间复杂度:O(1)

稳定性:不稳定

(2)堆排序:堆排序关键在于删除根节点和构造堆。

具体操作先将待排序的数组构造成一个大根堆,此时,整个数组的最大值就是堆结构的顶端即完全二叉树的根节点,记录根节点并将根节点删除,(删除时将最后一个节点和根节点交换再删除)将得到的二叉树重新构造成大根堆,重复上述步骤依次记录的最大值组成降序排列的数组。

升序排列将大根堆变为小根堆即可。

时间复杂度:平均情况O(nlog₂n),最好情况O(nlog₂n),最坏情况O(nlog₂n)

空间复杂度:O(1)

稳定性:不稳定

4.归并排序

将n个元素两两归并并排序,得到n/2个长度为1或2的有序表,再将得到的有序表两两归并并排序,反复归并,知道合并为一个长度为n的有序表为止,这种称为2路归并排序。

时间复杂度:平均情况O(nlog₂n),最好情况O(nlog₂n),最坏情况O(nlog₂n)

空间复杂度:O(n)

稳定性:不稳定

5.基数排序 

基数排序不基于比较和移动进行排序,而基于关键字个位大小排序。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值