def partition(arr, pivot_index):
index = 0
r = len(arr) - 1
pivot_value = arr[pivot_index]
arr[pivot_index], arr[r] = arr[r], arr[pivot_index]
for i in range(0, r + 1):
if arr[i] > pivot_value:
arr[index], arr[i] = arr[i], arr[index]
index += 1
arr[index], arr[r] = arr[r], arr[index]
return index
#找到数组中的中位数并返回
def pivot_mid(arr):
n = len(arr)
while n > 5:
cols = (n // 5) + 1
m = [] # 存储中位数
for i in range(cols):
s = sorted(arr[5 * i:(5 * i + 5)])
s_mid = (len(s) - 1) // 2
# print(s_mid)
m.append(s[s_mid])
arr = m
n = len(arr)
print(n)
arr.sort()
return arr[n // 2]
def bfprt(arr, k):
pivot = pivot_mid(arr)
pivot_index = arr.index(pivot)
index = partition(arr, pivot_index)
n = len(arr)
if k < n - index:
return bfprt(arr[index + 1:n], k)
elif k == n - index:
return pivot
elif k > n - index:
return bfprt(arr[0:index], k - (n - index))
array = [2, 3, 8, 5, 6, 7, 9, 0, 4, 1, 11, 12]
print(sorted(array))
print(bfprt(array, 5))
基础算法——BFPRT
最新推荐文章于 2024-02-09 08:39:07 发布