我试图得到用python实现的三个快速排序算法的中间值,但无法找出问题所在以及它不起作用的原因
from statistics import median
def Swap(arr, posA, posB):
arr[posA], arr[posB] = arr[posB], arr[posA]
def Median(array):
medianValue = median([array[0], array[int(len(array)/2)], array[-1]])
return array.index(medianValue)
def Partition(array, start, end):
pivot = array[end]
i = start-1
for j in range(start, end):
if array[j] <= pivot:
i += 1
Swap(array, i, j)
Swap(array, i+1, end)
return i + 1
def Quicksort(array, startInd, endInd):
if startInd < endInd:
medianIndex = Median(array)
Swap(array, medianIndex, endInd)
pivot = Partition(array, startInd, endInd)
Quicksort(array, startInd, pivot - 1)
Quicksort(array, pivot + 1, endInd)
谢谢你的帮助:)
问题是,您得到的是基于整个阵列的三个中位数,而不是正在处理的子部分。一个可能的解决办法是:
将中值函数更改为:
然后将快速排序函数更改为
相关问题 更多 >
编程相关推荐