基本排序算法 - 选择 插入 希尔
选择排序
选择排序是最基本的排序算法。比较像冒泡排序,但是冒泡排序在已经排序的情况下(设置flag跳出循环),只需要O(N),但是选择排序需要O(N2)
基本思想:
遍历,寻找数组中最小的元素,然后放到数组最前面。
递归这个过程。
复杂度:
O(N^2)
插入排序
选择排序的改进。可以看到选择排序每次都需要遍历整个数组,找到最小值。
插入排序不需要每次遍历寻找最小值,而是每次在已经排序的数组中,找到自己的位置。(有点像整理自己的扑克牌)
整个数组 VS 已经排序的数组,遍历次数大致为2倍的关系。所以,如果测试性能的话,一般插入排序的性能 ~= 选择排序的2倍。
基本思想:
针对每个没有排序的元素,在已经排序的数组中,找到自己的位置,并插入。(整理扑克牌)
复杂度:
O(N^2) (但是只有插入排序的1/2倍)
希尔排序
插入排序的改进。插入排序在逆序的时候,性能会特别差,因为对于最小的元素,插入时,需要移动整个数组 -1 次,即N - 1次。