Сортируйте Radix на две ячейки, сначала на основе первого разряда, а затем на основе второго разряда - PullRequest
0 голосов
/ 14 октября 2018

Я создал функцию для сортировки списка чисел по порядку, но сначала я хочу вернуть значения на основе первой цифры, а затем на основе второй цифры.Например, если я ввожу числа: 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()

Это производит окончательный вывод, но не по каждой цифре

...