Я создал функцию для сортировки списка чисел по порядку, но сначала я хочу вернуть значения на основе первой цифры, а затем на основе второй цифры.Например, если я ввожу числа: 14, 51, 21, 3, 96, 835, 108,40, он должен вывести [[40], [51, 21], [], [3], [14], [835], [96], [], [108], []], а второй должен выводить [[3, 108], [14], [21], [835], [40], [51], [], [], [], 96]]
Код, который у меня есть, работает для сортировки чисел в общем порядке в общем порядке, поэтому [3, 14, 21, 40, 51, 96, 108, 835]но я также хочу, чтобы он выводил шаги, прежде чем перейти к этой точке.Я не уверен, должен ли я просто сделать новую функцию, чтобы показать их, или я могу вернуть их в функции radixSort
from Queue import Queue
def radixSort(nums):
if nums is None or len(nums) < 1:
return nums
mainQ = Queue()
binQs = []
for n in nums:
mainQ.enqueue(n)
for i in range(10):
binQs.append(Queue())
maxLen = len(nums[0])
for i in range(1, len(nums)):
if len(nums[i]) > maxLen:
maxLen = len(nums[i])
for i in range(1, maxLen+1):
visited = []
while not mainQ.is_empty():
val = mainQ.dequeue()
if i > len(val):
visited.append(val)
continue
r = val[-i] #get the ith index from last
r = int(r)
binQs[r].enqueue(val)
for v in visited:
mainQ.enqueue(v)
for i in range(10):
while not binQs[i].is_empty():
mainQ.enqueue(binQs[i].dequeue())
result = []
while not mainQ.is_empty():
result.append(mainQ.dequeue())
return result
def readInput():
while True:
print ("Enter comma separated numbers: ")
data = input()
data = data.split(",")
try:
nums = [d.strip() for d in data]
break
except ValueError:
print ("Bad input, plz try again..")
return nums
def printData(nums):
if nums is None or len(nums) < 1:
print ("EMPTY LIST")
else:
for n in nums:
print (n, end=" ")
print()
def main():
nums = readInput()
nums = radixSort(nums)
print ("After applying radix sort: ")
printData(nums)
if __name__ == '__main__':
main()
Это производит окончательный вывод, но не по каждой цифре