快速排序
最受欢迎的排序方法,时间复杂度为O(NlogN)
大体思路 选择一个基准数,使整个数列左边的数字比基准数小,右边的数比基准数大,然后对基准数两边的数列进行递归处理。
最坏情况每次比较的基准数都是该数列中最小的或者最大的,那么该区间则只比上一次比较的区间数字少一个,时间复杂度为O(n平方)
最好情况每次比较的基准数都是该数列最中间的数,复杂度为O(NlogN)
快速选择排序
选择topk大或者小
改变递归后选择的区间,只要保证n-k的值对应下标在该区间,就可以只对该区间进行比较递归处理
归并排序
迭代加递归
分而治之,治完了并起来,然后两两按顺序比较
无论情况好坏都是O(NlogN)
比较
快速排序在原数组上操作,空间复杂度较低,而归并排序需要进行大量的复制,因此快速排序即使不稳定, 在实际使用中也比归并排序快