快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想—-分治法也确实实用
该方法的基本思想是:
1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
虽然快速排序称为分治法,但分治法这三个字显然无法很好的概括快速排序的全部步骤。因此我的对快速排序作了进一步的说明:挖坑填数+分治法:
def partition(arr, start, end):
i = (start - 1) # 最小元素索引
pivot = arr[end]
for j in range(start, end):
# 当前元素小于或等于 pivot
if arr[j] <= pivot:
i = i + 1
arr[i], arr[j] = arr[j], arr[i]
arr[i + 1], arr[end] = arr[end], arr[i + 1]
return (i + 1)
# arr[] --> 排序数组
# start --> 起始索引
# end --> 结束索引
# 快速排序函数
def quickSort(arr, start, end):
if start < end:
pi = partition(arr, start, end)
quickSort(arr, start, pi - 1)
quickSort(arr, pi + 1, end)
arr = [10, 7, 8, 9, 1, 5]
n = len(arr)
quickSort(arr, 0, n - 1)
print("排序后的数组:",arr)