キューを使用してリストを適切に基数ソートするにはどうすればよいですか?
私はPython3xを使用しています。
キューは先入れ先出しのデータ構造であるため、これはキューをビンとして使用する私の試みです。
from my_queue import Queue
def rsort(n):
'''(list of int) -> list of int
'''
list_length = len(n)
val = 0
mod = 10
k = 1
bin_list = []
alist = n
for bins in range(0,10):
bin_list.append(Queue())
while val == 0:
for num in alist:
sig_dig = num % mod
sig_dig = int(sig_dig / k)
bin_list[sig_dig].enqueue(num)
if bin_list[0].size() == list_length:
alist.append(bin_list[0].dequeue())
else:
mod = mod * 10
k = k * 10
new_list = []
for bins in bin_list:
if not bins.is_empty():
new_list.append(bins.dequeue())
alist = new_list
return alist
私のコードは、次のような小さな数値でも完全に機能します。[3,2,6,5,8,7]
ただし、リスト内の値が次のように大きくなる場合:[240, 28, 5, 18, 140, 2]
私のプログラムはリストをソートしなくなり、番号が欠落して順序付けされなくなります。
私は自分のプログラムでたくさん遊んでいますが、それを修正することはできません:(