十大經典排序演算法 基數排序

2021-09-25 22:04:41 字數 1285 閱讀 9264

一、演算法複雜度

二、實現流程

1、尋找最長元素的位的數量;

2、按照最低位值的大小進行排序,然後再按照次高位的值排序;

3、直到每乙個位都比較之後就能得到最終的排序結果;

三、**實現

import numpy as np

def radix_sort(arr):

max_val = arr[0]

#獲取最大值:max_val = max(arr)

for val in arr:

if abs(val) > max_val:

max_val = abs(val)#考慮負數

#獲取最大值的位數

max_len = 0

if max_val < 10:

return 1

else:

while max_val:

max_val = max_val // 10

max_len += 1

#進行排序;

tmp_arr = arr[:]

mod, dev = 10, 1

for _ in range(max_len):

tmp_res = list(map(lambda x : list(x), np.zeros(shape=(20, 1))))#0~9代表負數,10~19代表正數

for i in range(len(tmp_arr)):

if tmp_arr[i] < 0:

idx = int(((tmp_arr[i] % mod) / dev))#python中取餘不同

elif tmp_arr[i] >= 0:

idx = int(((tmp_arr[i] % mod) / dev)) + 10

#更新值

tmp_arr = #更新為空,按照順序重新儲存;

for val_list in tmp_res:

tmp_arr.extend(val_list[1:])

mod *= 10

dev *= 10

return tmp_arr

test = [-3, 5, 4, 7, 2, -8, -12, 112, 224, -1185, 0]

print(radix_sort(test)) #[-1185, -12, -8, -3, 0, 2, 4, 5, 7, 112, 224]

十大經典排序演算法(十 基數排序)

基數排序是一種非比較型整數排序演算法,其原理是將整數按位數切割成不同的數字,然後按每個位數分別比較。基數排序有兩種方法 這三種排序演算法都利用了桶的概念,但對桶的使用方法上有明顯差異 1 ar counter 2function radixsort arr,maxdigit 11counter bu...

十大經典排序演算法 基數排序01

基數排序是按照低位先排序,然後收集 再按照高位排序,然後再收集 依次類推,直到最高位。有時候有些屬性是有優先順序順序的,先按低優先順序排序,再按高優先順序排序。最後的次序就是高優先順序高的在前,高優先順序相同的低優先順序高的在前。演算法步驟 將所有待比較數值 正整數 統一為同樣的數字長度,數字較短的...

十大經典排序演算法之基數排序 python

原理 a 1,20,36,44,6,9,102,86,94,5 乙個即將排序的陣列a,準備一排0 9依次排好序的桶,先判斷a陣列中每個元素個位數的值,然後填入對應的桶裡,填完之後再從左到右依次從桶裡取出來 接著對新排好序的陣列從十位判斷,位數不夠預設為0,以此迴圈,直到a陣列中最大的元素的最高位排完...