def quick_sort(array, l, r):
if l < r:
q = partition(array, l, r)
print(q)
quick_sort(array, l, q - 1)
quick_sort(array, q + 1, r)
def partition(array, l, r):
x = array[r] # 基准元素:当前列表中的最后一个元素 17
i = l - 1 # 第一次i为-1
for j in range(l, r): # 从第二个位置开始遍历,直到最后一个元素
# print(j) j = 0到(r-1)
if array[j] <= x: # 将当前元素与基准元素比较,
i += 1
# print(array[j])
array[i], array[j] = array[j], array[i]
# print(array)
print(array)
# print(i)
array[i + 1], array[r] = array[r], array[i+1]
print(array)
return i + 1
if __name__ == '__main__':
list = [6, 7, 0, 34, 15, 2, 17]
quick_sort(list, 0, 6)
print(list)
# 快速排序
def quick_sort(list, left, right):
# 递归结束的条件
if left >= right:
return
mid_v = list[left] # 找到基准元素值
low = left
high = right
# 两个指针,一个从列表左边往右扫,一个从右往左扫
# 左边选择比基本元素大的,右边选择比基准元素小的,然后将二者交换位置,
# 一轮结束后,左边全部比基准元素小,右边全部比基准元素大
while low < high:
# 右往左
while low < high and list[high] >= mid_v:
high -= 1
list[low] = list[high]
# 从左往右
while low < high and list[low] <= mid_v:
low += 1
list[high] = list[low]
# low = high ,将中间值放入正确的位置
list[low] = mid_v
quick_sort(list, left, low-1)
quick_sort(list, low+1, right)
if __name__ == '__main__':
list = [6, 7, 0, 34, 15, 2, 17]
print(list)
quick_sort(list, 0, len(list)-1)
print(list)