python数据结构与算法—>排序NB三人组之快速排序
分析
``
时间复杂度: nlogn
# 归位函数
def partition(li, left, right):
tmp = li[left] # 让tmp为第一个(此处可以优化)
while left < right:
while left < right and li[right] >= tmp: # 从右边找比tmp小的数
right -= 1 # 找不到则往左移
li[left] = li[right] # 将右边找到的小的数放到左边空位上
# print(li)
while left < right and li[left] <= tmp: # 从左边找比tmp大的数
left += 1 # 找不到则向右移
li[right] = li[left] # 将左边找到的较大的数放到右边空位上
# print(li)
li[left] = tmp # left=right,退出while循环,tmp归位
return left # 返回mid的值(left=right,故返回left\right均可)
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) # 右边归位
return li # 返回排列好的列表
li = [5, 7, 4, 6, 3, 1, 2, 9, 8]
print(quick_sort(li, 0, len(li) - 1))