排序与搜索
排序是将一串数据依照特定顺序进行排列的算法
排序算法的稳定性:有相等键值的元素排序后不会改变排位
冒泡排序
天平自右向左依次比较两个数据的大小,若左边大则互换位置。重复操作直至排序完成。
最优时间复杂度O(n)
最差时间复杂度O(n^2)
具有稳定性
优化:如果每一次没有改变排序则提前跳出循环
选择排序
利用线性查找找到待排序数据中的最小值将其与序列第一个数据交换
时间复杂度O(n^2)
不稳定
插入排序
从未排序部分最左边元素插入研究排序完成部分的正确位置
希尔排序
插入排序的改进版
设置gap分为子序列进行插入排序
gap=4 -> gap=2 -> gap=1
最优时间复杂度取决于gap的选取
最差时间复杂度O(n^2)
快速排序
随机选择一个基准值,小于基准值的排在左边,大于基准值的排在右边。
再对基准值两侧区域重复上述操作。
最优时间复杂度O(n^2)
最差时间复杂度O(n^2)
归并排序算法
将序列分为长度相同的两个子序列,重复直至每个子序列只有一个数据,然后对子序列进行归并。合并时比较两个子序列的首位大小。
总结 常见排序算法效率比较