Я пытаюсь реализовать сортировку Radix в python.Python Radix Sort
Моя текущая программа работает неправильно, так как список, подобный [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]))
Если вы заботитесь о скорости, вы бы не создали свой собственный вид. –
Я пытаюсь сделать самый быстрый сорт, я могу – ytpillai
В принципе, я не хочу, чтобы это было O (n^2) или что-то – ytpillai