1、选择排序
思路:从第一个元素开始,找出之后的元素比它小的进行替换。
时间复杂度:$O(N^2)$
空间复杂度:$O(1)$
不稳定
|
|
2、插入排序
思路:假设前i个元素已经排好序,将i+1个元素插入到合适的位置。
时间复杂度:$O(N^2)$
空间复杂度:$O(1)$
稳定
|
|
3、冒泡排序
思路:每一轮通过相邻元素交换将最小元素移到开头,开头已经冒泡完成的元素不再移动。
时间复杂度:$O(N^2)$
空间复杂度:$O(1)$
稳定
|
|
快速排序
思路:选择中间的数作为基准,比它小的移到左边,比它大的移到右边,对左右两部分进行递归。
时间复杂度:$O(NlogN)$
空间复杂度:$O(logN)$
不稳定
|
|
5、归并排序
思路:将数组递归分成两部分,假设每部分都已排好序,进行组合。
时间复杂度:$O(NlogN)$
空间复杂度:$O(N)$
稳定
|
|
6、希尔排序
思路:将数组分成若干个子序列,对各个子序列进行直接插入排序,缩小子序列的间隔执行上述步骤,最后变成一个子序列。
时间复杂度:$O(NlogN)$
空间复杂度:$O(1)$
不稳定
7、堆排序
思路:先构建最大堆,每次将根节点与最后一个元素交换,并调整最大堆。
时间复杂度:$O(NlogN)$
空间复杂度:$O(NlogN)$
不稳定
|
|
8、基数排序
思路:先按照元素的个位数字进行分组,重新组合,然后是十位,直到最高位。
时间复杂度:$O(d(n+rd))$
空间复杂度:$O(rd+n)$
稳定
|
|