前端算法詳解——排序

一、概述

1. 常見(jiàn)的排序算法?

1.冒泡排序
    每次比較相鄰的兩個(gè)數(shù),如果后一個(gè)比前一個(gè)小,換位置
2.選擇排序
    每次站在自己的位置上,往下找,找打最小數(shù),然后和當(dāng)前換位置
3.歸并排序
    采用了二分法,左邊一個(gè)排好的數(shù)組,右邊一個(gè)排好的數(shù)組,每次比較左右第一個(gè)數(shù),小的放在一個(gè)新的數(shù)組里
4.快速排序
    采用了二分法,取出中間數(shù),數(shù)組,每次和中間數(shù)比較,小的放在左邊,大的放到右邊

2. 算法沒(méi)有完美的算法,只有合適的算法
3. 怎么去平衡一個(gè)算法好壞?

    1.時(shí)間角度(程序跑多長(zhǎng)時(shí)間)
    2.空間角度(硬盤(pán),越小越好)
二、 冒泡排序
  var arr = [12, 233, -90, 23, -80];
    function bubbleSort(arr) {
        for (var i = 0; i < arr.length - 1; i++) {
            for (var j = 0; j < arr.length; j++) {
                if (arr[j + 1] < arr[j]) {
                    var tmp;//換位置找中間值
                    tmp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = tmp;

                }
            }
        }
        return arr;
    }
    document.write(bubbleSort(arr));
三、 二分排序
  var arr = [12, 233, -90, 23, -80];
    function mySort(arr, s, e) {
        if (s > e) {
            return [];
        } else if (s == e) {
            return [arr[e]];
        }
        var c = Math.floor((s + e) / 2);
        var left = mySort(arr, s, c);
        var right = mySort(arr, c + 1, e);
        var result = [];
        while (left.length > 0 || right.length > 0) {
            if (left[0] < right[0]) {
                result.push(left.shift());
            } else {
                result.push(right.shift());
            }
            if (left.length == 0) {
                result = result.concat(right);
                break;
            } else if (right.length == 0) {
                result = result.concat(left);
                break;
            }
        }
        return result;
    };
    document.write(mySort(arr, 0, arr.length - 1));
四、 快速排序
  var arr = [12, 233, -90, 23, -80];
    function quickSort(arr) {
        if (arr.length <= 0) {
            return [];
        }
        var cIndex = Math.floor(arr.length / 2);
        var c = arr.splice(cIndex, 1);
        var left = [];
        var right = [];
        for (var i = 0; i < arr.length; i++) {
            if (arr[i] < c[0]) {
                left.push(arr[i]);
            } else {
                right.push(arr[i]);
            }
        }
        return quickSort(left).concat(c, quickSort(right));
    };
    document.write(quickSort(arr));
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 作者:大海里的太陽(yáng)原文地址:http://www.cnblogs.com/wxisme/ 前言 查找和排序算法是算...
    IT程序獅閱讀 2,627評(píng)論 0 63
  • 大寫(xiě)的轉(zhuǎn) 目錄 [冒泡排序][雞尾酒排序] [選擇排序] [插入排序][二分插入排序][希爾排序] [歸并排序] ...
    Solang閱讀 1,880評(píng)論 0 16
  • 前言 查找和排序算法是算法的入門(mén)知識(shí),其經(jīng)典思想可以用于很多算法當(dāng)中。因?yàn)槠鋵?shí)現(xiàn)代碼較短,應(yīng)用較常見(jiàn)。所以在面試中...
    寶塔山上的貓閱讀 1,165評(píng)論 1 21
  • 夕陽(yáng)西下,農(nóng)民工小偉和小力拖著疲憊的步伐,渾身臟兮兮地從遠(yuǎn)處走來(lái),邊走邊聊……隨后,坐在路邊,望著不遠(yuǎn)處運(yùn)動(dòng)健身的...
    獨(dú)秀一梔閱讀 1,312評(píng)論 29 74
  • 今日小雪,微涼 睡前聽(tīng)會(huì)歌是個(gè)還好的選擇 歌如黑胡椒予我的口味 不必須,別太多,不挑類 適量的時(shí)候很是歡喜 歌里帶...
    小樣面閱讀 206評(píng)論 0 0

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