# sherwood algorithm
import time
import random
def time_calculate():
start = time.perf_counter()
mid_value = main()
end = time.perf_counter()
return mid_value, end - start
def sherwood_solve(arr):
length = len(arr)
mid = (length - 1) // 2
def swap(i, j):
if i == j:
return
arr[i] ^= arr[j]
arr[j] ^= arr[i]
arr[i] ^= arr[j]
def solve(li=0, ri=length-1):
if li >= ri:
# print("->", li, ri)
if li == mid:
return arr[ri]
else:
return None
pivot = random.randint(li, ri)
pivot_value = arr[pivot]
swap(li, pivot)
l = li
r = ri
while l < r:
while arr[l] <= pivot_value and l < ri:
l += 1
while arr[r] >= pivot_value and r > li:
r -= 1
if l < r:
swap(l, r)
pivot = r
swap(li, pivot)
if pivot == mid:
return pivot_value
l_result = solve(li, pivot-1)
if l_result is not None:
return l_result
return solve(pivot+1, ri)
mid_v = solve()
return mid_v
def main():
arr = []
length = random.randint(20, 28)
# length = 1
print("Array:")
for i in range(length):
arr.append(random.randint(0, 100))
print(arr[i], end=" ")
print("")
return sherwood_solve(arr)
if __name__ == "__main__":
mid_value, time_consumption = time_calculate()
print("Mid value = {} Time consumption : {}".format(mid_value, time_consumption))
[Python3]Sherwood 型线性时间选择算法
猜你喜欢
转载自blog.csdn.net/chenhanxuan1999/article/details/91850267
今日推荐
周排行