快速排序:
1.原地排序
2.O(nlogn)(最坏O(n^2) 这也是严重缺点之一)
3.要尽量保证输入的元素是基本无序的,因为在有序情况下,其时间复杂度是O(n^2)
4.不稳定
5.与归并排序一样是分治法的经典算法
Code:
class Sort:
@classmethod
def sort(cls, arr):
cls.sortQuick(arr, 0, len(arr) -1)
@classmethod
def sortQuick(cls, arr, lo, hi):
if lo >= hi:
return
p = cls.position(arr, lo, hi)
cls.sortQuick(arr, lo, p)
cls.sortQuick(arr, p+1, hi)
@classmethod
def position(cls, arr, lo, hi):
v = arr[lo]
i = lo
j = hi
while True:
while i < hi and arr[i] <= v:
i += 1
while j > lo and arr[j] >= v:
j -= 1
if i >= j:
break
else:
arr[i], arr[j] = arr[j], arr[i]
arr[lo], arr[j] = arr[j], arr[lo]
return j