我创建了一个功能,用于按顺序对数字列表进行排序,但是我首先要根据第一个数字返回值,然后根据第二个数字返回值。例如,如果我输入数字: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()
这将产生最终输出,但不是每个数字