window.onload=function () {
//因為這個陣列最大的元素只有三位,所以傳入3
console.log(radixSortRise([99,15,48,75,46,37,90,100],3,1000,100));
// console.log(radixSortDown([99,15,48,75,46,37,90,100],3));
}
/**
* JS實作基數排序-升序
* @param arr 待排序陣列
* @param maxDigit元素的最大位數
* @param mod和dev取決于最大位數是多少 如果是百位
* mod傳入1000 dev傳入100
**/
function radixSortRise(arr, maxDigit,mod,dev) {
//創建大桶
var counter = [];
//原陣列的元素下標
var pos;
//1.根據元素的最大位數決定LSD分配法的最大分配次數
//2.當前的所有元素的最大位數為3
//3.因為當前的所有元素中最大元素只有三位數,所以最多分配三次
//4.分配三次后即排序完成
for (var i = 0; i < maxDigit; i++, dev =dev/10, mod = mod/10) {
// 把待排序的陣列 arr 中的每一位整數,插入對應的容器
for(var j = 0; j < arr.length; j++) {
//1.依次獲取每個元素的各個位數,從個位開始獲取,直到獲取至最大位數
//2.通過位數的數值得到元素要存放的小桶的下標
var bucket = parseInt((arr[j] % mod) /dev);
//1.如果這個小桶下標所對應的小桶不存在
//2.在這個大桶里創建這個下標的小桶
if(counter[bucket]==null) {
counter[bucket] = [];
}
// 把這個元素存放到指定下標的小桶中
counter[bucket].push(arr[j]);
}
//每次進行收集之前,初始化原陣列的陣列下標
pos = 0;
//升序收集
//從大桶的第一個小桶開始依次每個小桶,并將每個小桶的元素依次放回原陣列
for(var j = 0; j < counter.length; j++) {
//如果這個小桶存在
if(counter[j]!=null) {
//取出當前小桶中的第一個元素
var value = counter[j].shift();
//如果這個元素存在則從第一個元素開始依次取出所有元素
while (value != null) {
//將這個元素放入當前的元素位置,并在放完后,繼續獲取下一個元素位置的下標
arr[pos++] = value;
//獲取當前的小桶中的下一個元素,并在獲取后將這個元素從小桶洗掉
value = counter[j].shift();
}
}
}
}
//將排序完成的陣列回傳到外部
return arr;
}
uj5u.com熱心網友回復:
前幾天剛寫的,基數排序,桶排序都有,自己看吧https://github.com/zhengw060024/algorithmpratice/tree/master/algorithemJs/chapter8uj5u.com熱心網友回復:
代碼是ts的,自己找個typescript編譯器編譯下,或者直接用js檔案也可以轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/53475.html
標籤:服務器
