iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 11
0
自我挑戰組

透過JavaScript學習演算法與資料結構系列 第 11

基數排序法(Radix Sort LSD mode)

  • 分享至 

  • xImage
  •  

主要精神陣列中的每個數依序以個位數、十位數、百位數等去做一個分類排序,有分成LSD、MSD兩種mode。

步驟:

  1. 選定好本回合使用的基數
  2. 依序用基數對每一筆資料取得該回合的LSD
  3. 依取得的LSD將資料放到對應的桶子中
  4. 依桶子內存放的順序,將資料回存原來的陣列
  5. 重複上面四個步驟,直到範圍內的基數皆已使用

先看這段影片
Yes

const {isSorted}=require('./utils');

function getMaxNumberLength(arr) {
  let max = 0;
  for(let i=0;i<arr.length;i++){
    if(max<arr[i]){
      max=arr[i];
    }
  }
  return max.toString().length;
}

function getPosition(num, place){
  return  Math.floor(Math.abs(num)/Math.pow(10,place))% 10;
}

function radixSortLSD(arr) {

  const max = getMaxNumberLength(arr); // length of the max digit in the array

  for (let i = 0; i < max; i++) {
    let buckets = Array.from(Array(10), () => []);
    for (let j = 0; j < arr.length; j++) {
      buckets[getPosition(arr[j], i)].push(arr[j]); // pushing into buckets
    }
    arr = [].concat(...buckets);
  }
  return arr;
}

let arr = [10,15,1,60,5,100,25,50];
console.log(radixSortLSD(arr));

程式碼


上一篇
計數排序法(Counting Sort)
下一篇
線性搜尋(Linear Search)
系列文
透過JavaScript學習演算法與資料結構30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言