成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

用JS寫(xiě)計(jì)數(shù)排序、基數(shù)排序

tulayang / 1156人閱讀

摘要:計(jì)數(shù)排序計(jì)數(shù)排序就是簡(jiǎn)單的桶排序,一個(gè)桶代表數(shù)組中一個(gè)數(shù)出現(xiàn)的個(gè)數(shù),所以需要一個(gè)和數(shù)組數(shù)字范圍一樣大的輔助數(shù)組,一般用在范圍小于的排序,時(shí)間復(fù)雜度為,空間復(fù)雜度為數(shù)組的數(shù)字范圍。

計(jì)數(shù)排序

計(jì)數(shù)排序就是簡(jiǎn)單的桶排序,一個(gè)桶代表數(shù)組中一個(gè)數(shù)出現(xiàn)的個(gè)數(shù),所以需要一個(gè)和數(shù)組數(shù)字范圍一樣大的輔助數(shù)組,一般用在范圍小于100的排序,時(shí)間復(fù)雜度為O(n),空間復(fù)雜度為數(shù)組的數(shù)字范圍。

/**
 * 范圍在 start - end 之間的排序
 * 計(jì)數(shù)排序需要輔助數(shù)組,該輔助數(shù)組的長(zhǎng)度是待排序數(shù)組的范圍,所以一般用作范圍小于100的排序
 */
function countSort(arr, start, end) {
    var len = arr.length;
    // 桶數(shù)組
    var suportArr = new Array(end - start + 1);
    // 結(jié)果數(shù)組
    var resArr = new Array(len);
    // 初始化桶數(shù)組
    for (i = 0; i < suportArr.length; i++) {
        suportArr[i] = 0;
    }
    // 待排序數(shù)組中的數(shù)組出現(xiàn),在桶子對(duì)應(yīng)位置+1代表這個(gè)數(shù)出現(xiàn)的個(gè)數(shù)+1了
    for (let i = 0; i < len; i++) {
        suportArr[arr[i]]++;
    }
     // 從第1項(xiàng)開(kāi)始,桶數(shù)組加上前一個(gè)桶的個(gè)數(shù),現(xiàn)在輔助數(shù)組的意義變成了每一項(xiàng)的排名了。
    for (let i = 1; i < suportArr.length; i++) {
        suportArr[i] += suportArr[i - 1];
    }
    // 根據(jù)輔助數(shù)組的排名,從后往前賦值
    for (let i = len - 1; i >= 0; i--) {
        resArr[suportArr[arr[i]] - 1] = arr[i];
        suportArr[arr[i]]--;
    }

    return resArr;
}
基數(shù)排序

基數(shù)排序是多躺的桶排序

var radix = 16; // 基數(shù),可以為任何數(shù),越大趟數(shù)越小,但是桶數(shù)越多,最好根據(jù)最大數(shù)字進(jìn)行定義。
function _roundSort(arr, round, radix) {
    var buckets = new Array(radix);

    for (let i = 0; i < radix; i++) {
        buckets[i] = [];
    }
    // 將數(shù)組中的數(shù)放進(jìn)對(duì)應(yīng)的桶子中
    for (let i = 0; i < arr.length; i++) {
        let remainder = Math.floor(arr[i] / (radix ** (round - 1))) % radix;

        buckets[remainder].push(arr[i]);
    }

    // 將數(shù)組重新根據(jù)桶子進(jìn)行排序
    var index = 0;
    for (let i = 0; i < buckets.length; i++) {
        for (let j = 0; j < buckets[i].length; j++) {
            arr[index++] = buckets[i][j];
        }
    }
}

function radixSort(arr, round) {
    for (let i = 1; i <= round; i++) {
        _roundSort(arr, i, radix);
    }
    return arr;
}

console.log(radixSort([10,5,5,50,0,155,4622,5,1,4,2154], 4));

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/85238.html

相關(guān)文章

  • JavaScript 數(shù)據(jù)結(jié)構(gòu)與算法之美 - 桶排序、計(jì)數(shù)排序基數(shù)排序

    摘要:之所以把計(jì)數(shù)排序桶排序基數(shù)排序放在一起比較,是因?yàn)樗鼈兊钠骄鶗r(shí)間復(fù)雜度都為。動(dòng)畫(huà)計(jì)數(shù)排序思想找出待排序的數(shù)組中最大和最小的元素。桶排序計(jì)數(shù)排序能派上用場(chǎng)嗎手機(jī)號(hào)碼有位,范圍太大,顯然不適合用這兩種排序算法。 showImg(https://segmentfault.com/img/bVbuF9e?w=900&h=500); 1. 前言 算法為王。 想學(xué)好前端,先練好內(nèi)功,只有內(nèi)功深厚者...

    Awbeci 評(píng)論0 收藏0
  • 計(jì)數(shù)排序,桶排序基數(shù)排序

    摘要:涉及的算法有計(jì)數(shù)排序基數(shù)排序桶排序,它們被歸類為非比較排序。計(jì)數(shù)排序沒(méi)有對(duì)元素進(jìn)行比較,只是利用了箱與元素的一一對(duì)應(yīng)關(guān)系,根據(jù)箱已經(jīng)排好序的先決條件,解決排序?;鶖?shù)排序,是按照從高位到低位的順序進(jìn)行分組排序。內(nèi)部排序也是用基數(shù)排序。 一般算法能做到O(logn),已經(jīng)非常不錯(cuò),如果我們排序的對(duì)象是純數(shù)字,還可以做到驚人的O(n)。涉及的算法有計(jì)數(shù)排序、基數(shù)排序、桶排序,它們被歸類為非比...

    GitChat 評(píng)論0 收藏0
  • JavaScript 數(shù)據(jù)結(jié)構(gòu)與算法之美 - 十大經(jīng)典排序算法匯總

    摘要:筆者寫(xiě)的數(shù)據(jù)結(jié)構(gòu)與算法之美系列用的語(yǔ)言是,旨在入門(mén)數(shù)據(jù)結(jié)構(gòu)與算法和方便以后復(fù)習(xí)。這應(yīng)該是目前較為簡(jiǎn)單的十大經(jīng)典排序算法的文章講解了吧。比如原本在的前面,而,排序之后,在的后面十大經(jīng)典排序算法冒泡排序思想冒泡排序只會(huì)操作相鄰的兩個(gè)數(shù)據(jù)。 showImg(https://segmentfault.com/img/bVbvHet); 1. 前言 算法為王。想學(xué)好前端,先練好內(nèi)功,內(nèi)功不行,就...

    zsy888 評(píng)論0 收藏0
  • 數(shù)據(jù)結(jié)構(gòu)以及相關(guān)排序

    摘要:桶排序與計(jì)數(shù)排序的區(qū)別桶排序中一個(gè)桶可以放一個(gè)范圍內(nèi)的多個(gè)數(shù)據(jù),在各個(gè)桶中又可以用其他方法排序,其快速之處在于只用對(duì)比同一個(gè)桶內(nèi)的數(shù)字而無(wú)需與其他桶的數(shù)字作對(duì)比。與計(jì)數(shù)排序相比,桶排序需要作二次對(duì)比,但可省略桶的個(gè)數(shù)。 哈希表(Hash Table) 所有符合鍵值對(duì)即key-value的結(jié)構(gòu)就是哈希。數(shù)組其實(shí)也是一種哈希。 計(jì)數(shù)排序(復(fù)雜度(n+max))無(wú)法統(tǒng)計(jì)負(fù)數(shù)和小數(shù),需要一個(gè)...

    Brenner 評(píng)論0 收藏0
  • 前端面試必備——十大經(jīng)典排序算法

    摘要:冒泡排序冒泡排序也是一種簡(jiǎn)單直觀的排序算法。但希爾排序是非穩(wěn)定排序算法。快速排序又是一種分而治之思想在排序算法上的典型應(yīng)用。本質(zhì)上來(lái)看,快速排序應(yīng)該算是在冒泡排序基礎(chǔ)上的遞歸分治法。 冒泡排序 冒泡排序(Bubble Sort)也是一種簡(jiǎn)單直觀的排序算法。它重復(fù)地走訪過(guò)要排序的數(shù)列,一次比較兩個(gè)元素,如果他們的順序錯(cuò)誤就把他們交換過(guò)來(lái)。走訪數(shù)列的工作是重復(fù)地進(jìn)行直到?jīng)]有再需要交換,也就...

    RebeccaZhong 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<