JS排序演算法總結:(八)基數排序

來源:互聯網
上載者:User

標籤:bucket   for   temp   strong   XML   位置   最大值   基數排序   image   

目的:掌握 基數排序 的 基本思想與過程、代碼實現、時間複雜度

1、基本思想與過程:(只針對數字)

  (1)首先確定基數為10,數組的長度也就是10.每個數都會在這10個數中尋找自己的位置。

  (2)不同於BinSort會直接將數放在數組的下標處,如將 [34] 放在下標為34的位置,即a[34] = 34;基數排序是將34分開為3和4,第一輪排序根據最末位放在數組的下標4處,第二輪排序根據倒數第二位放在數組的下

標3處,然後遍曆數組即可。

 

2、代碼實現:

function RadixLSDSort (arr, digit) {    const radix = 10;   // 基數,以10進位來進行排序    var i = 0,         j = 0,        count = Array(radix), // 0~9的桶        len = arr.length,        bucket = Array(len);    // 利用LSD,也就是次位優先    for (var d = 0; d < digit; d++) {        for (i = 0; i < radix; i++) {            count[i] = 0;        }        // 向各個桶中添加元素,並統計出每個桶中裝的個數        for (i = 0; i < len; i++) {            j = getDigit(arr[i], d);            count[j]++;        }        // count的越往後值最大,最大值為arr.length        // count數組的值為,該位元值為該索引的數字總數        for (i = 1; i < radix; i++) {            count[i] = count[i] + count[i - 1];        }        // 按照桶的順序將匯入temp中        for (i = len - 1; i >= 0; i--) {            j = getDigit(arr[i], d);            bucket[count[j] - 1] = arr[i];            count[j]--;         }        // 將已經根據相應位元排好的序列導回arr中        for (i = 0; i < len; i++) {            arr[i] = bucket[i];        }    }       return arr}// 獲得每位的數字function getDigit(x,d){    var a = [ 1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000];    return (Math.floor(x / a[d]) % 10);}

3、時間複雜度:O(d(n+r),其中:d為待排列數位最大位元,n為待排序列的長度,r為進位數 

JS排序演算法總結:(八)基數排序

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.