js實(shí)現(xiàn)基數(shù)排序

/**

? ? * 基數(shù)排序 O(d(n+radix))

? ? * radix 基數(shù) d為堆數(shù)

? ? *

? ? * @param {any} arr

? ? * @param {any} radix 基數(shù)

? ? * @returns

? ? *

? ? * @memberof sort

? ? */

? ? sort8(arr, radix) {

? ? ? ? let max = this.findMax(arr, radix); // 找出堆數(shù)

? ? ? ? console.log(max);

? ? ? ? for(let i = 1;i <= max;i++) {

? ? ? ? ? ? this.buildBy(arr, i, radix);

? ? ? ? }

? ? ? ? return arr;

? ? }

? ? /**

? ? * 找出堆數(shù)

? ? *

? ? * @param {any} arr

? ? * @param {any} radix 基數(shù)

? ? * @returns 堆數(shù)

? ? *

? ? * @memberof sort

? ? */

? ? findMax(arr, radix) {

? ? ? ? let max = 1;

? ? ? ? let len = arr.length;

? ? ? ? for (let i = 0; i < len;i++) {

? ? ? ? ? ? while(Math.floor(arr[i] / (radix** (max- 1))) > 1) {

? ? ? ? ? ? ? ? max++;

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? return max;

? ? }

? ? /**

? ? * 分桶排序

? ? *

? ? * @param {any} arr

? ? * @param {any} index 當(dāng)前桶

? ? * @param {any} radix 基數(shù)

? ? *

? ? * @memberof sort

? ? */

? ? buildBy(arr, index, radix) {

? ? ? ? let bockets = new Array(radix);

? ? ? ? for (let i = 0;i < radix;i++) {

? ? ? ? ? ? bockets[i] = [];

? ? ? ? }

? ? ? ? for (let i = 0;i < arr.length;i++) {

? ? ? ? ? ? let remainder = Math.floor(arr[i] / (radix ** (index - 1))) % radix;

? ? ? ? ? ? bockets[remainder].push(arr[i]);

? ? ? ? }

? ? ? ? var temp = 0;

? ? ? ? for (let i = 0;i < bockets.length;i++) {

? ? ? ? ? ? for (let j = 0;j< bockets[i].length;j++) {

? ? ? ? ? ? ? ? arr[temp] = bockets[i][j];

? ? ? ? ? ? ? ? temp++

? ? ? ? ? ? }

? ? ? ? }

? ? }

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 排序算法可能是你學(xué)編程第一個(gè)學(xué)習(xí)的算法,還記得冒泡嗎? 當(dāng)然,排序和查找兩類算法是面試的熱門選項(xiàng)。如果你是一...
    無腳鳥30閱讀 1,053評論 0 0
  • 排序算法說明 (1)排序的定義:對一序列對象根據(jù)某個(gè)關(guān)鍵字進(jìn)行排序; 輸入:n個(gè)數(shù):a1,a2,a3,…,an 輸...
    code武閱讀 750評論 0 0
  • 1、冒泡排序 最簡單的一種排序算法。假設(shè)長度為n的數(shù)組arr,要按照從小到大排序。則冒泡排序的具體過程可以描述為:...
    Joe_2e0c閱讀 538評論 0 0
  • 0、算法概述 0.1 算法分類 十種常見排序算法可以分為兩大類: 非線性時(shí)間比較類排序:通過比較來決定元素間的相對...
    Demon_code閱讀 1,115評論 0 2
  • 今天在外面跑了好多地方! 起床:7:20 就寢:24:00 天氣:晴 心情:開心 紀(jì)念日:和老爸逛超市(我老爸一般...
    姬櫻閱讀 257評論 0 3

友情鏈接更多精彩內(nèi)容