【发布时间】:2021-04-19 19:32:20
【问题描述】:
有许多不同版本的 quickSort 以不同的方式选择轴。
- 始终选择第一个元素或最后一个元素作为枢轴
- 选择一个随机元素作为基准。
- 选择中位数作为支点。
我已经使用 the last element as the pivot 实现了一切正常,但是当我尝试对中间元素实现相同的逻辑时,它无法正常工作。
这是我在 python 中的代码:
import random
import time
start = time.time()
def quickSort(a,l,r):
if(l<r):
p = partition(a,l,r)
quickSort(a,l,p-1)
quickSort(a,p+1,r)
def partition(a,l,r):
i = l-1
p = a[(l+(r-l))//2]
for j in range(l,r):
if a[j] <= p:
i += 1
a[i],a[j] = a[j],a[i]
a[i+1],a[r] = a[r],a[i+1]
return (i+1)
N = 10
a = [random.randint(1,100) for i in range(N)]
print(a)
quickSort(a,0,N-1)
print(a)
print("It took %s milli seconds"%((time.time()-start)*100))
这是输出
[88, 35, 55, 68, 96, 23, 44, 77, 78, 71]
[35, 55, 23, 68, 44, 77, 88, 96, 78, 71]
It took 1.5625953674316406 milli seconds
【问题讨论】:
-
无论随机位置的中间,你最好将该元素移动到末尾,然后它与从末尾选择元素作为枢轴相同。如果没有这一举措,索引将是一场噩梦
-
试过调试了吗?你的发现是什么。
标签: python algorithm sorting quicksort