八大排序---排序算法比较总结

排序名称:直接插入排序(insertsort)
时间复杂度:O(n平方)
时间复杂度备注:若查找时从前往后找,最好的情况(1 2 3 4 5),时间复杂度还是O(n^2),因为在查找合理位置的时候找的次数太多,所以改进方法是找合理位置的时候是从后往前找,而不是从前往后找;所以最好的情况(必须从后往前找)时间复杂度是O(n)
空间复杂度:O(1)
空间复杂度备注:
稳定性:稳定
稳定性备注:稳定,因为两两比较
备注:直接插入排序最大的特点,越有序越快(但是是快速排序最大的缺点,越有序越慢)

排序名称:希尔排序(shellsort)
时间复杂度:O(n的1.3到1.5次方)
时间复杂度备注:它的时间是所取“增量”序列的函数,这涉及一些数学上尚未解决的难题。增量序列可以有多种取法,但需注意:应使增量序列中的值没有除1以外的公因子(取的组数相互之间互素),并且最后一个增量值必须等于1;
空间复杂度:O(1)
空间复杂度备注:虽然用了一个增量数组,但是组数相对于总数来说很少
稳定性:不稳定
稳定性备注:只要是跳跃式的交换就不稳定
备注:间隔分组

排序名称:冒泡排序(bubblesort
时间复杂度:O(n^2)
时间复杂度备注:
空间复杂度:O(1)
空间复杂度备注:
稳定性:稳定
稳定性备注:稳定,因为两两比较
备注:1 2 3 4 5,冒泡的时间复杂度是O(n^2),对冒泡可以优化,加一个状态变量,如果所有的数据连一次都没有进行交换(说明已经有序),则冒泡结束,时间复杂度是O(n)

排序名称:快速排序(quicksort)
时间复杂度:O(n*log2 n)(以2为底,对n取对数)
时间复杂度备注:一次划分的时间复杂度是O(n),虽然是双层while循环,但是只遍历了一遍;递归的时间复杂度是O(log2 n)(以2为底,对n取对数),因为每次划分都是截一半
空间复杂度:O(log2 n)(以2为底,对n取对数)
空间复杂度备注:一次划分的空间复杂度是O(1),递归的空间复杂度是O(log2 n)(以2为底,对n取对数),因为递归依赖于栈。
稳定性:不稳定
稳定性备注:因为跳跃式交换
备注:对于快速排序,越有序越差;完全有序,退化成选择排序,时间复杂度是O(n平方)   就平均性能而言,快速排序是所有排序中比较好的

排序名称:选择法排序(selectsort)
时间复杂度:O(n^2)
时间复杂度备注:
空间复杂度:O(1)
空间复杂度备注:
稳定性:不稳定
稳定性备注:不稳定,因为不是两两比较,跳跃式交换,是简单排序(O(n^2)的算法都是简单排序)里面唯一一个不稳定的算法
备注:最好的情况是:1 2 3 4 5,选择排序的时间复杂度是O(n^2)

排序名称:堆排序(heapsort)
时间复杂度:O(n*log2 n)(以2为底,对n取对数)
时间复杂度备注:一次调整函数的时间复杂度是O(log2 n)(以2为底,对n取对数),建立大根堆的时间复杂度是O(n*log2 n)(以2为底,对n取对数)
空间复杂度:O(1)
空间复杂度备注:
稳定性:不稳定
稳定性备注:跳跃式交换父和子
备注:堆排序是对选择排序的改进算法

排序名称:归并排序(mergesort)
时间复杂度:O(n*log2 n)(以2为底,对n取对数)
时间复杂度备注:
空间复杂度:O(n)
空间复杂度备注:需要创建一个额外的数组保存归并的数据
稳定性:稳定
稳定性备注:因为是两两比较
备注:归并排序是速度快里面唯一的一个稳定的算法,但是它的缺点是空间复杂度大

排序名称:基数排序(俗称桶排序)(radixsort)
时间复杂度:O(d*n)
时间复杂度备注:d为进桶出桶的趟数,d比较小,所以有的书上说是O(n);函数RadixSort的时间复杂度是O(d),d为进桶出桶的趟数,函数Radix的时间复杂度是O(n)
空间复杂度:O(n)
空间复杂度备注:空间复杂度是O(n+r),r是桶的个数,即有的直接说是O(n)
稳定性:稳定
稳定性备注:
备注:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值