排序总结

冒泡:适合链表,稳定
插排:适合于逆序对少的基本有序的数组,稳定

它们都是交换相邻点,每一次交换消除一个逆序对,所以交换的次数是一样的
要想让算法快起来,要一次交换消除多个逆序对


希尔排序:保持了插排的简单,同时试图克服一次只能消除一个逆序对,Dk间隔地进行插排,每次减少Dk的大小直到为1,这样的一个好处是到最后的1时数组基本有序
Dk的选取会影响算法复杂度,可以从array.length一直除2,也可以用其它的方法计算


选择排序:一次可以消除多个逆序对,交换的次数最坏是O(N),但是每次都要找到最小的值,都要遍历,所以无所谓最好情况与最坏情况都是O(N^2)
那优化就要从找最小数入手,那不就是用堆嘛


堆排:用最大堆,最小堆需要额外的数组保存
是选择排序的优化版


归并排序:适合于外排序,不适合于放到内存的内排序
递归法分而治之,最开始声明辅助数组,然后当做指针传人,每次重复利用
非递归也是开个数组,两个数组之间相互向对方归并


快排:分而治之,子集划分完后,pivot被一次性被放倒指定位置不再变化


表排序:不交换元素数组中的值,新建一个table,记录index,操作table里面的index,适合于只要求输出排序结果的情况


基数排序:每次按照一位一位排,拉成链表
桶排是基排的特殊情况(基数为1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值