1. 程式人生 > 遊戲攻略 >《幻塔》克羅恩盧米納號PDC2密碼分享

《幻塔》克羅恩盧米納號PDC2密碼分享

計數排序

計數排序有四個步驟:

(1)首先會對每個輸入進行頻率統計,得到元素的頻率表;

(2)然後將頻率錶轉換為該元素的開始索引

(3)根據各個元素的開始索引,將相同元素分類到臨時陣列中。

(4)最後將臨時陣列中的元素寫回到原陣列中。

/*計數排序*/
function countingSort(arr) {
    //找到最大最小值,計算差值
    var max_num = Math.max.apply(Math,arr);
    console.log("max:"+max_num);
    var min_num = Math.min.apply(Math,arr);
    console.log("min:"+min_num);
    var len = max_num-min_num+1;
    //計算頻率
    var count = new Array(len + 1);
    count.fill(0); //填充0
    for (let i = 0; i < arr.length; i++) {
        //使用加1的索引,有重複的地方自增
        count[arr[i]-min_num+1]++;
    }
    console.log("count:"+count);
    //計算開始索引
    for (let i = 0; i < count.length-1; i++) {
        count[i+1] += count[i];
    }
    console.log("count:"+count);
    //元素按照開始索引分類,用到一個臨時陣列
    var result = new Array(arr.length);
    for (let i = 0; i < arr.length; i++) {
        // 填充一個數據後,count[i]自增,以便相同的資料可以填到下一個空位
        result[count[arr[i]-min_num]++] = arr[i];
    }
    for (var i = 0; i < arr.length; i++) {
        arr[i] = result[i];
    }
}
var arr = [3,2,5,4,6,1,9,5,3,0,1];
countingSort(arr);
console.log(arr);