排序算法学习总结
排序算法在经典算法里面是非常重要的,于是花了点时间将之前学习的常见的排序算法进行总结。
对于每种排序算法,需要理解以下问题:1.算法思想是什么
2.时间复杂度
3.稳定性
4.什么情况下适用?
基于比较的排序,已证明,基于比较的排序算法时间复杂度不会低于O(nlgn)最好的情况能达到这个下限,包括:插入排序/希尔排序/选择排序/堆排序/冒泡排序/归并排序/快速排序
不是基于比较的排序算法有望将时间复杂度降到O(nlgn)以下,适当的作为补偿,待排序的序列也必须有一定的规律,包括:计数排序/基数排序/桶排序
插入排序
算法思想:从数组的第二个元素开始遍历整个数组。针对每个元素,依次将其前面的所有元素从后向前和进行比较,大于它的元素均向后移动,最后将该元素插入。
时间复杂度:O(n^2)。最好情况下,已经有序O(n),最坏情况下逆序O(n^2)
稳定性:稳定,原址排序
适用场景:当数组已经基本有序时,使用插入排序能有效减少移动的次数,时间消耗最少。