基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
def partition(li,left,right):
tmp =li[left]
while left <right:
while left <right and li[right] >=tmp:#从右找比tmp小的数
right -=1
li[left] =li[right]#把右边值写到左边空位
while left <right and li[left] <=tmp:#从左找比右边tmp大的放右边空位
left +=1
li[right] =li[left]
li[left] =tmp#把tmp归位
return left
def quick_sort(li,left,right):
if left <right:
mid=partition(li,left,right)
quick_sort(li,left,mid-1)
quick_sort(li,mid+1,right)
li = [5,7,4,6,3,1,2,9,8]
quick_sort(li,0,len(li)-1)
print(li)
平均时间复杂度:O(NlogN)
最佳时间复杂度:O(NlogN)
最差时间复杂度:O(N²)