https://www.cnblogs.com/Hangingter/p/9589427.html
https://www.jianshu.com/p/2b2f1f79984e
# -*- coding: utf-8 -*- # @Time : 2020/4/25 15:27 # @File : quick_sort.py # @Author: Hero Liu # 快速排序 # 一开始假定数组第一个元素是基准值 # 设定两个指针:左指针和右指针,分别指向数组的头部元素和尾部元素 # 1)然后从数组尾部往左扫描,如果元素值大于基准值,则右指针向左偏移 # 如果右指针指向的元素小于基准值,那么把这个元素值赋值给左指针 # 2)右边扫描完一次后开始从数组头部往右扫描,如果左指针指向的元素小于基准值,则左指针继续向右偏移 # 偏移后继续判断左指针指向的元素与基准值的大小,如果左指针指向的值大于基准值,那么把这个值赋值给右指针 # 3)重复上述1)、2)步骤,直到左右指针重合,此时指针左边的值即是所有小于基准值的元素 # 指针右边的值即是所有大于基准值的元素 # 4)再分别对指针左边的子序列和指针右边的子序列进行上述排序【递归】 def quick_sort(L): return q_sort(L, 0, len(L) - 1) def q_sort(L, left, right): if left < right: pivot = partition(L, left, right) q_sort(L, left, pivot - 1) q_sort(L, pivot + 1, right) return L def partition(L, left, right): pivotkey = L[left] while left < right: while left < right and L[right] >= pivotkey: right -= 1 L[left] = L[right] while left < right and L[left] <= pivotkey: left += 1 L[right] = L[left] L[left] = pivotkey return left L = [5, 9, 1, 11, 6, 7, 2, 4] print(quick_sort(L))