方法一:
参考资料:https://baijiahao.baidu.com/s?id=1617821935743300963&wfr=spider&for=pc
def quicksort(array):
# 基线条件:为空或只包含一个元素的数组是“有序”的
if len(array) < 2:
return array
else:
# 递归条件
pivot = array[0]
# 所有小于基准值组成的子数组
less = [i for i in array[1:] if i <= pivot]
greater = [i for i in array[1:] if i > pivot]
# 所有大于基准值组成的子数组
# print((quicksort(less) + [pivot] + quicksort(greater)))
return quicksort(less) + [pivot] + quicksort(greater)
arr = [6, 3, 2, 7, 9, 1, 4, 5, 10, 8]
print(quicksort(arr))
方法二
复杂一点,不是特别懂
"""
快速排序:
1-挑挑选基准值:从数列中挑出一个元素,称为"基准"(pivot);
2-分割:重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(
3-递归排序子序列:
"""
def partition(arr, low, high):
# arr[] --> 排序数组
# low --> 起始索引
# high --> 结束索引
i = (low - 1)
pivot = arr[high] # 将列表最后一个元素作为基准值
for j in range(low, high): # 遍历列表中除了基准值以外的所有元素
# 当前元素小于或等于 pivot
if arr[j] <= pivot:
i = i + 1
arr[i], arr[j] = arr[j], arr[i]
arr[i + 1], arr[high] = arr[high], arr[i + 1]
return (i + 1) # 基准值的索引
# 快速排序函数
def quickSort(arr, low, high):
if low < high:
pi = partition(arr, low, high) # 基准值的索引
# print(pi)
quickSort(arr, low, pi - 1)
quickSort(arr, pi + 1, high)
arr = [6, 3, 2, 7, 9, 1, 4, 5, 10, 8]
n = len(arr)
quickSort(arr, 0, n - 1)
print("排序后的数组:", arr)