現給定一組資料:如下圖
1、進行第一次分配【根據個位數字分配】
2、將第一步分配好的資料取出
3、將一次取出的資料進行再分配【根據數字的十位數進行分配】
4、第二次取出資料
5、進行第三次分配【根據數字的百位數進行分配】
6、三次取出
7、規律總結:我們發現,分配的次數是陣列元素的最大的內個數的位數決定的,所以,我們要取到這個數字,並求出它是幾位數。
8、**階段:
對 "桶"的實現我們使用乙個二維陣列加乙個一維陣列組合來實現資料訪問。
下面:show code
const
array
=(index1,index2)
=>
}return a;};
const
radixsort
=(arr)
=>
}//計算最大的數字是幾位數
let maxlength =
string
(max)
.length;
//用於臨時儲存資料的陣列/二維
let temp =
array(10
,arr.length)
;//用於記錄temp中響應的陣列中存放的數字的數量
let counts =
newarray(10
);//根據最大長度的數字位數決定比較的次數
for(
let i =
0,n=
1;i,n*=10)
; temp[ys]
[counts[ys]
]= arr[j]
; counts[ys]+=1
;}//記錄元素需要存放的位置
let index =0;
//取出元素
for(
let k =
0;k)//重置counts
counts[k]
= undefined;}}
}};const
main=(
)=>
;main()
;
測試結果如下:
9.需要注意是:上面"桶"的實現並不是只有這乙個方法,js 陣列的定義未初始化的元素為 undefined,二維陣列的定義值得學習交流。。。
10.如有不妥之處,還請指教。。。
c 實現基數排序
以下介紹內容 百科 基數排序的方式可以採用lsd least significant digital 或msd most significant digital lsd的排序方式由鍵值的最右邊開始,而msd則相反,由鍵值的最左邊開始。以lsd為例,假設原來有一串數值如下所示 73,22,93,43,...
基數排序 佇列實現
基數排序是一種不需要比較就能實現排序的演算法思維,主要步驟為分配和收集的過程,重複這個過程於最大數的位數後,排序結束。以下是完全以佇列模擬桶的分配收集過程。標頭檔案 單鏈表部分 typedef int elemtype typedef struct lnode lnode,linklist int ...
python 實現基數排序
由桶排序改進來的 從最低位到最高位依次桶排序 最後輸出最後排好的列表 def radixsort list,d for k in range d d輪排序 每一輪生成10個列表 s for i in range 10 因為每一位數字都是0 9,故建立10個桶 for i in list 按第k位放入...