将Radix分为两个bin,首先根据第一个数字的位置,然后根据第二个数字的位置

时间:2018-10-13 23:45:09

标签: python python-3.x radix-sort

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

这将产生最终输出,但不是每个数字

0 个答案:

没有答案