[英]Quick sort using median as pivot working (but shows incorrect count for comaprisons)
[英]Quick Sort Algorithm using the median as a pivot
想要一些关于这个问题的答案:我想做快速排序,将第一个、最后一个和列表中间的元素之间的中值作为 pivot。 目前我有这段代码,我真的不明白为什么它会变得一团糟......
list = []
n = int(input(""))
for i in range(0, n):
elements = int(input())
list.append(elements)
def qs(array, left, right):
if left < right:
div_pos = div(array, left, right)
qs(array, left, div_pos - 1)
qs(array, div_pos + 1 , right)
def div(array, left, right):
i = left
j = right - 1
pivot = array[right]
while i < j:
while i < right and array[i] < pivot:
i += 1
while j > left and array[j] >=pivot:
j-= 1
if i < j:
array[i], array[j] = array[j], array[i]
if array[i] > pivot:
array[i], array[right] = array[right], array[i]
return i
return array
for i in range(len(list)):
print ("%d" % list[i])
如果我只将def div()
放在def qs()
) 之外,代码对我有用
import random
random.seed(0)
array = []
#n = int(input(""))
#for i in range(n):
# value = int(input())
# array.append(value)
array = [random.randint(0, 100) for x in range(20)]
def div(array, left, right):
i = left
j = right - 1
pivot = array[right]
while i < j:
while i < right and array[i] < pivot:
i += 1
while j > left and array[j] >=pivot:
j-= 1
if i < j:
array[i], array[j] = array[j], array[i]
if array[i] > pivot:
array[i], array[right] = array[right], array[i]
return i
def qs(array, left, right):
if left < right:
div_pos = div(array, left, right)
qs(array, left, div_pos - 1)
qs(array, div_pos + 1 , right)
return array
print('before:', array)
qs(array, 0, len(array)-1)
#for value in array:
# print(value)
print('after :', array)
我用随机值而不是input()
对其进行了测试。
我使用了seed(0)
,所以总是得到相同的随机值。
before: [49, 97, 53, 5, 33, 65, 62, 51, 100, 38, 61, 45, 74, 27, 64, 17, 36, 17, 96, 12]
after : [5, 12, 17, 17, 27, 33, 36, 38, 45, 49, 51, 53, 61, 62, 64, 65, 74, 96, 97, 100]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.