排序是在学习算法和编程中最基础的一部分,而快速排序和归并排序又是这其中使用最普遍的两种排序方式,具体两种排序的实现原理网上有大量的讲解,这里只记录一些具体的代码实现,方便自己忘记的时候进行查阅。
快速排序(Quick Sort)
时间复杂度: 平均: O(NlogN) 最优: O(N) 最差: O(N^2)
空间复杂度: O(logN) (因为递归调用,所以是O(logN)不是O(1))
- 方法一:
|
|
- 方法二:
|
|
注意,在方法二中,从right往左遍历的时候,不能考虑 nums[j] == key
的情况,否则有可能会出现数组左边都是大于 key
右边都是等于 key
的情况,这时排序就无法继续进行。
归并排序(Merge Sort)
时间复杂度: 平均: O(NlogN) 最优: O(NlogN) 最差: O(NlogN)
空间复杂度: O(N)
|
|