快速排序
快速排序不同于归并排序的按元素在数组中的位置对数组进行划分,而是按照元素的值对其进行划分。具体来说,快速排序的思想主要是对数组中的元素进行重新排列,来得到一个快速排序的分区。在得到的分区中,所有s下标之前的元素都小于等于A[s],之后的元素都大于等于A[s]。
如何建立分区呢?首先我们应该选定一个中轴,在中轴左边的元素小于等于中轴元素,之后大于等于中轴元素。我们首先将第一个元素作为中轴,然后分别从数组的开头和结尾分别遍历数组。
-
第一步从数组的第二个元素开始,如果遍历的过程中忽略小于中轴元素的值,如果找到一个大于中轴元素的值A[i],停止遍历;然后从数组的最后一个元素往前遍历数组,大于中轴元素的值忽略,如果找到一个小于中轴元素的值A[j],停止遍历
-
第二步,比较i和j的值,如果i<j,交换i与j位置的元素,然后i ,j加一,继续遍历知道i>=j;如果i>=j,交换中轴元素与A[j]的值,得到一个划分。
python实现:
def partition(arr,low,high):
#分区函数
i = ( low-1 )
pivot = arr[high]
for j in range(low , high):
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)
quickSort(arr, low, pi-1)
quickSort(arr, pi+1, high)
公众号 :数学算法实验室
专注于算法与人工智能