10大排序

1.冒泡

 var arr = [3, 6, 8, 5, 4, 2, 1, 9, 7, 0];
    function m(arr) {
        for (var i = 0; i < arr.length - 1; i++) {
            for (var j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    var temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
        return arr;
    }

2.選擇

 function x(arr) {
        for (var i = 0; i < arr.length - 1; i++) {
            var index = i;
            for (var j = i + 1; j < arr.length; j++) {
                if (arr[j] < arr[index]) {
                    index = j;
                }
                var temp = arr[i];
                arr[i] = arr[index];
                arr[index] = arr[i];
            }
        }
        return arr;
    }

3.插入

 function c(arr) {
        for (var i = 0; i < arr.length; i++) {
            var a = arr[i];
            for (var j = i - 1; j >= 0 && arr[j] > a; j--) {
                arr[j + 1] = arr[j];
            }
            arr[j + 1] = a;
        }
        return arr;
    }

4.快速

 function k(arr) {
        if (arr.length <= 1) { return arr }
        var p = Math.floor(arr.length / 2);
        var point = arr.splice(p, 1)[0];
        var left = [];
        var right = [];
        for (var i = 0; i < arr.length; i++) {
            if (arr[i] < point) {
                left.push(arr[i]);
            } else {
                right.push(arr[i])
            }
        }
        return k(left).concat(point, k(right));
    }

5.歸并

 function g(arr) {
        if (arr.length < 2) { return arr };
        var mid = Math.round(arr.length / 2);
        var left = arr.slice(0, mid);
        var right = arr.slice(mid);
        return b(g(left), g(right));
    }
    function b(left, right) {
        var a = [];
        while (left.length > 0 && right.length > 0) {
            if (left[0] < right[0]) {
                a.push(left.shift());
            } else {
                a.push(right.shift());
            }
        }
        while (left.length > 0) {
            a.push(left.shift());
        }
        while (right.length > 0) {
            a.push(right.shift());
        }
        return a;
    }

6.希爾排序

            function sell(arr) {
                for (var gap = Math.floor(arr.length / 2); gap > 0; gap = Math.floor(gap / 2)) {     
                    var a;
        // 數(shù)組遍歷 i從第一個(gè)增量開始  從后面的比前面的
                    for (var i = gap; i < arr.length; i++) {
        // 定義一個(gè)變量儲存當(dāng)前的這個(gè)數(shù)
                        a = arr[i];
                        var j = i;
        // gap不變  是數(shù)組前半段    a是gap后面的數(shù)
                        while (j - gap >= 0  && arr[j - gap] > a) {
                            arr[j] = arr[j - gap];
                            j = j - gap;
                        }
                        arr[j] = a;
                    }
                }
                return arr;
            }

7.堆

 var len;   // 因?yàn)槁暶鞯亩鄠€(gè)函數(shù)都需要數(shù)據(jù)長度殴瘦,所以把len設(shè)置成為全局變量
    function buildMaxHeap(arr) {  // 建立大頂堆
        len = arr.length;
        for (var i = Math.floor(len / 2)-1; i >= 0; i--) {//以他的父節(jié)點(diǎn)來進(jìn)行判斷
            //i ==取出來的父節(jié)點(diǎn) 
            heapify(arr, i);
            console.log(i);     
        }
    }
    function heapify(arr, i) {    // 堆調(diào)整
        var left = 2 * i + 1,//左邊子節(jié)點(diǎn)
            right = 2 * i + 2,//右邊子節(jié)點(diǎn)
            largest = i;//把i當(dāng)成大頂堆中的父節(jié)點(diǎn)
        if (left < len && arr[left] > arr[largest]) {//不存在的節(jié)點(diǎn)排除
            largest = left;//如果左邊的子節(jié)點(diǎn)大于他的父節(jié)點(diǎn) 將其位置交換
        }
        if (right < len && arr[right] > arr[largest]) {
            largest = right;//如果右邊的子節(jié)點(diǎn)大于他的父節(jié)點(diǎn) 將其位置交換
        }
        if (largest != i) {//如果largest不等于i抛姑,說明他不大于他兩個(gè)子節(jié)點(diǎn)中得其中一個(gè)
            swap(arr, i, largest);//將位置交換
            heapify(arr, largest);//重新調(diào)用該方法   已達(dá)到維護(hù)完全二叉樹的性質(zhì)
        }
    }
    //交換位置方法
    function swap(arr, i, j) {
        var temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
    function heapSort(arr) {
        buildMaxHeap(arr);//建立新的大頂堆
        //因?yàn)?排序后 最頂部已經(jīng)是最大的數(shù) 
        //這里需要將第一位和最后一位的位置更換  將最后一位取出來
        //這時(shí)候 就需要保證大頂堆的成立 則需要調(diào)用 堆調(diào)整的方法
        // arr.length - 1 最后一位  0 為第一位(即最大值或者最小值)
        for (var i = arr.length - 1; i > 0; i--) {
            swap(arr, 0, i);
            len--;//每一次父級-1
            heapify(arr, 0);//保證大頂堆的成立
        }
        return arr;
    }

8.基數(shù)

  // 定義數(shù)組氯檐,表示桶
        var counter = [];
        // maxDigit最大位數(shù)   _ _ _
        function sort(arr, maxDigit) {
            var mod = 10;
            var dev = 1;
            //放桶里面
            for (var i = 0; i < maxDigit; i++) {
                // 遍歷數(shù)組抱慌,將所有數(shù)放入對應(yīng)桶中
                for (var j = 0; j < arr.length; j++) {
                    // 得到此數(shù)所在的桶
                    // 123%10  3/1=3
                    // 123%100 23/10=2.3
                    // 123%1000 123/100=1.23  
                    var bucket = parseInt((arr[j] % mod) / dev);
                    // 當(dāng)此桶為空時(shí)
                    if (counter[bucket] == null) {
                        // 聲明此桶為二維數(shù)組 
                        counter[bucket] = [];
                    }
                    // 將對應(yīng)的數(shù)放入對應(yīng)桶中
                    counter[bucket].push(arr[j]);
                }

                //放數(shù)組 再放上邊
                var pos = 0;
                // 遍歷桶噪径,將桶中的數(shù)依次放入數(shù)組中
                for (var j = 0; j < counter.length; j++) {
                    var value = null;
                    // 桶不為空時(shí)
                    if (counter[j] != null) {
                        // 數(shù)組不為空柱衔,刪除數(shù)組首位元素
                        while ((value = counter[j].shift()) != null) {
                            // 放入新數(shù)組
                            arr[pos++] = value;
                        }
                    }
                }
                mod *= 10, dev *= 10
            }
            return arr;
        }

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

function countingSort(arr, maxValue) {
    var bucket =new Array(maxValue + 1),
        sortedIndex = 0;
        arrLen = arr.length,
        bucketLen = maxValue + 1;
    for (var i = 0; i < arrLen; i++) {
        if (!bucket[arr[i]]) {
            bucket[arr[i]] = 0;
        }
        bucket[arr[i]]++;
    }
    for (var j = 0; j < bucketLen; j++) {
        while(bucket[j] > 0) {
            arr[sortedIndex++] = j;
            bucket[j]--;
        }
    }
    return arr;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市茅信,隨后出現(xiàn)的幾起案子似踱,更是在濱河造成了極大的恐慌隅熙,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件核芽,死亡現(xiàn)場離奇詭異囚戚,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)轧简,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門驰坊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人哮独,你說我怎么就攤上這事庐橙〖傥穑” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵态鳖,是天一觀的道長。 經(jīng)常有香客問我恶导,道長浆竭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任惨寿,我火速辦了婚禮邦泄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘裂垦。我一直安慰自己顺囊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布蕉拢。 她就那樣靜靜地躺著特碳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪晕换。 梳的紋絲不亂的頭發(fā)上午乓,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天,我揣著相機(jī)與錄音闸准,去河邊找鬼益愈。 笑死,一個(gè)胖子當(dāng)著我的面吹牛夷家,可吹牛的內(nèi)容都是我干的蒸其。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼库快,長吁一口氣:“原來是場噩夢啊……” “哼摸袁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起缺谴,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤但惶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后湿蛔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體膀曾,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年阳啥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了添谊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,013評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡察迟,死狀恐怖斩狱,靈堂內(nèi)的尸體忽然破棺而出耳高,到底是詐尸還是另有隱情,我是刑警寧澤所踊,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布泌枪,位于F島的核電站,受9級特大地震影響秕岛,放射性物質(zhì)發(fā)生泄漏碌燕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一继薛、第九天 我趴在偏房一處隱蔽的房頂上張望修壕。 院中可真熱鬧,春花似錦遏考、人聲如沸慈鸠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽青团。三九已至,卻和暖如春稽亏,著一層夾襖步出監(jiān)牢的瞬間壶冒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工截歉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留胖腾,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓瘪松,卻偏偏與公主長得像咸作,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子宵睦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容