【发布时间】:2016-02-15 21:15:26
【问题描述】:
我正在尝试在 python 中实现基数排序。
我当前的程序无法正常工作,因为 [41,51,2,3,123] 之类的列表将正确排序为 [2,3,41,51,123],但类似于 [52,41,51,42 ,23] 将变为 [23,41,42,52,51](52 和 51 放错了位置)。
我想我知道为什么会发生这种情况,因为当我比较十位的数字时,我不比较单位(对于 10 的高次幂也是如此)。
如何解决此问题,以便我的程序以最快的方式运行?谢谢!
def radixsort(aList):
BASEMOD = 10
terminateLoop = False
temp = 0
power = 0
newList = []
while not terminateLoop:
terminateLoop = True
tempnums = [[] for x in range(BASEMOD)]
for x in aList:
temp = int(x / (BASEMOD ** power))
tempnums[temp % BASEMOD].append(x)
if terminateLoop:
terminateLoop = False
for y in tempnums:
for x in range(len(y)):
if int(y[x] / (BASEMOD ** (power+1))) == 0:
newList.append(y[x])
aList.remove(y[x])
power += 1
return newList
print(radixsort([1,4,1,5,5,6,12,52,1,5,51,2,21,415,12,51,2,51,2]))
【问题讨论】:
-
如果你关心速度,你就不会创建自己的排序。
-
我正在尝试以最快的速度进行排序
-
基本上,我不希望它是 O(n^2) 什么的
-
澄清一下,你意识到你最终不会得到比内置排序更快的排序,对吧?
-
是的,我并不热衷于速度,但我希望它大约是基数程序的正常时间。
标签: python radix-sort