import math def radixSort(list, radix = 10): ''' math.ceil 爲x取整,結果是不小於x的最小整數. math.log(x, a) 返回 log 以 a 爲底 x 的對數,若不給定 a 則底默認爲 e ''' k = int(math.ceil(math.log(max(list), radix))) bucket = [[]for i in range(radix)] for i in range(1, k+1): for j in list: # math.floor(x)返回 ≦ x的最大整數,例:math.floor(3.4) = 3 bucket[math.floor(j / (radix **(i-1)) % (radix))].append(j) #print(bucket) # 從列表中刪除全部元素 del list[:] for z in bucket: print (z) list +=z print (list) del z[:] return list list = [434,24,657,976,2354,9,67,8099,4353,3453] print(radixSort(list)) ''' import random import math def radixSort(): #A=[random.randint(1,9999) for i in range(10)] A =[5042,7431,3620,6306,858,8215,6438,2187,9830,2611] print(A) for k in range(4): #4輪排序 s=[[] for i in range(10)] for i in A: # 10**k 巧妙的把k=0問題解決了 s[math.floor(i/(10**k)%10)].append(i) # s = [[A,B,C],[]], b = [A,B,C],a=A. A=[a for b in s for a in b] return A print(radixSort()) '''