Я пытаюсь реализовать сортировку Radix в 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]))
np.ndarray
). Может быть, это поможет. - person MSeifert   schedule 16.02.2016