排序算法
排序算法的稳定性,
稳定算法和不稳定算法 稳定算法
不稳定算法可能在相等的键值中改变记录的相对次序
冒泡排序 比较简单
选择排序 一趟一趟找最小值,找到一个最小值和第i次寻找的i位数字交换
插入排序 从右侧无序序列插入到有序序列,每个数字和左边有序序列从右往左比较,如果判断比该数小就交换,直到不能交换为止,再开始无序序列下一个数与有序序列的半段
希尔排序 是插入排序的改进版 整体序列取一个间隔,gap,分组做插入算法,然后调小gap,调小到1进行插入排序 取gap的策略更改可以优化时间复杂度
快速排序 用第一个数作为分界点,使用左右端两个游标,开始判断最后一个数和分界数的大小,如果遇到比分界数小的则把该数交换到左侧第一个空位,然后开始判断左侧第一个数和分界数大小,开始遇到比分界数打的把该数交换到右侧空位,直到左右两侧都是比分界数小的和大的,然后两头再进行上述循环,形成递归 (和分界点数相等的数放在同一边)递归可以再次调用快排方法,参数是原序列以及操作的范围。处理的只有一个元素的时候到达极限了
切片的时候传入的是一个新的对象,不能用切片,所以快排方法需要引入新的参数
归并排序 列表先分,分到最小剩一个再开始排序合并 归并排序生成一个新的序列,需要额外的空间
快排必须掌握
排序算法总结:
搜索 二分查找
折半查找,速度快
时间复杂度为 最快 O(logn)