欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

【JaVAScript】js的五種排序方法(圖文詳解)

admin
2023年6月29日 18:39 本文熱度 669

1.冒泡排序

說明

  1. 比較所有相鄰元素,如果第一個比第二個大,則交換它們。一輪下來保證可以找到一個數是最大的。執行n-1輪,就可以完成排序。

圖示

代碼

//定義一個原生的bubbleSort方法

Array.prototype.bubbleSort = function () {

    for(let i = 0; i < this.length - 1; i += 1) {

        //通過 this.length 次把第一位放到最后,完成排序

        //-i是因為最后的位置是會動態改變的,當完成一次后,最后一位會變成倒數第二位

        for(let j = 0; j < this.length - 1 - i; j += 1) {

            if(this[j] > this[j+1]) {

                const temp = this[j];

                this[j] = this[j+1];

                this[j+1] = temp;

            }

        }

    }

}

const arr = [4,8,0,1,43,53,22,11,0];

arr.bubbleSort();

console.log(arr);


2.選擇排序

說明

  1. 找到數組中的最小值,選中它并將其放置在第一位。接著找到第二個最小值,選中它并將其放置到第二位。執行n-1輪,就可以完成排序。

圖示

代碼

Array.prototype.selectionSort = function() {

    for(let i = 0; i < this.length - 1; ++i) {

        // 假設最小的值是當前的下標

        let indexMin = i;

        //遍歷剩余長度找到最小下標

        for(let j = i; j < this.length; ++j) {

            if(this[j] < this[indexMin] ) {

                indexMin = j;

            }

        }

        if(indexMin !== i) {

            //交換當前下標i與最小下標的值,重復this.length次

            const temp = this[i];

            this[i] = this[indexMin];

            this[indexMin] = temp;

        }

    }

};


3.插入排序

說明

  1. 從第二個數開始往前比,比它大就往后排,以此類推進行到最后一個數。

圖示:

代碼:

Array.prototype.insertionSort = function() {

    //從第二個數開始往前比

    for(let i = 1; i<this.length; ++i) {

        //先把值保存起來

        const temp = this[i];

        let j = i;

        while(j > 0) {

            if(this[j-1] > temp) {

                this[j] = this[j-1];

            } else {

                //因為已經是排序過的了,如果比上一位大,那就沒必要再跟上上位比較了

                break;

            }

            j -= 1;

        }

        //這里的j有可能是第0位,也有可能是到了一半停止了

        this[j] = temp;

    }

};

const arr = [5,4,3,2,1];

arr.insertionSort();


4.歸并排序

說明:
分: 把數組劈成兩半,再遞歸地對數組進行“分”操作,直到分成一個個單獨的數;
合:把兩個數合并為有序數組,再對有序數組進行合并,直到全部子數組合并為一個完整數組。
圖示:

代碼:

Array.prototype.mergeSort = function () {

    const rec = (arr) => {

        //如果數組長度為1,說明切完了,可以直接返回

        if (arr.length === 1) { return arr; }

        //切分數組,把每一項都單獨切出來

        const mid = Math.floor(arr.length / 2);

        const left = arr.slice(0,mid);

        const right = arr.slice(mid,arr.length);

        //有序的左邊數組

        const orderLeft = rec(left);

        //有序的右邊數組

        const orderRight = rec(right);

        //定義一個數組來存放順序數組

        const res = [];

        // 把左右兩個有序的合并為一個有序的返回

        while(orderLeft.length || orderRight.length) {

            if(orderLeft.length && orderRight.length) {

                res.push(orderLeft[0] < orderRight[0] ? orderLeft.shift() : orderRight.shift())

            } else if (orderLeft.length) {

                res.push(orderLeft.shift());

            } else if (orderRight.length) {

                res.push(orderRight.shift());

            }

        }

        return res;

    };

    const res = rec(this);

    //拷貝到數組本身

    res.forEach((n,i) => { this[i] = n; });

}

const arr = [5,4,3,2,1];

arr.mergeSort();

console.log(arr);


5.快速排序

說明:
分區:從數組中任意選擇一個基準,所有比基準小的元素放到基準前面,比基準大的元素放到基準的后面;
遞歸:遞歸地對基準前后的子數組進行分區。

圖示

代碼

Array.prototype.quickSort = function () {

    const rec = (arr) => {

       // 預防數組是空的或者只有一個元素, 當所有元素都大于等于基準值就會產生空的數組

       if(arr.length === 1 || arr.length === 0) { return arr; }

       const left = [];

       const right = [];

       //以第一個元素作為基準值  

       const mid = arr[0];

       //小于基準值的放左邊,大于基準值的放右邊

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

           if(arr[i] < mid) {

               left.push(arr[i]);

           } else {

               right.push(arr[i]);

           }

       }

        //遞歸調用,最后放回數組   

       return [...rec(left),mid,...rec(right)];

    };

    const res = rec(this);

    res.forEach((n,i) => { this[i] = n; })

}

const arr = [2,3,4,5,3,1];

arr.quickSort();

console.log(arr)



該文章在 2023/6/29 18:41:50 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved