冒泡排序
重复遍数组,两两之间相互比较,按照一定规则交换。
优化:当一次遍历未发生交换时,排序结束
时间复杂度:平均:O(n^2),最差:O(n^2)
空间复杂度:O(1)
1 | /** |
选择排序
与冒泡排序相比,每次循环记录最大(最小)的索引值,一遍循环结束后再进行交换。
时间复杂度:平均:O(n^2),最差:O(n^2)
空间复杂度:O(1)
1 | /** |
插入排序
将当前元素,插入到之前已有序的元素中。
时间复杂度:平均:O(n^2),最差:O(n^2)
空间复杂度:O(1)
1 | /** |
希尔排序
对插入排序的改进版。先将整个待排序的数组分割成诺干个子序列,分别进行插入排序。不断进行,直至全部数组进行一次插入排序。
1 | /** |
归并排序
分治算法,将元素不断一分为二。接着将小数组进行归并操作。
时间复杂度:O(nlogn)
空间复杂度:O(n)
1 | /** |
快速排序
分治算法,根据选择的基准数将数组一分为二。一侧都比基准数小或等于,一侧都比基准数大。
时间复杂度:平均:O(nlogn) 最差:O(n^2)
空间复杂度:O(logn) ~ O(n)
1 | /** |
堆排序
大根堆/小根堆。创建一个堆,并把队尾与队首进行交换,不断维护堆。
时间复杂度:O(nlogn)
空间复杂度:O(1)
1 | /** |
计数排序
利用空间换取时间,数据的范围必须是有限确定的。
1 | /** |