狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

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

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

1.冒泡排序

說明

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

圖示

代碼

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

Array.prototype.bubbleSort = function () {

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

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

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

        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. 找到數(shù)組中的最小值,選中它并將其放置在第一位。接著找到第二個最小值,選中它并將其放置到第二位。執(zhí)行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. 從第二個數(shù)開始往前比,比它大就往后排,以此類推進行到最后一個數(shù)。

圖示:

代碼:

Array.prototype.insertionSort = function() {

    //從第二個數(shù)開始往前比

    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 {

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

                break;

            }

            j -= 1;

        }

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

        this[j] = temp;

    }

};

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

arr.insertionSort();


4.歸并排序

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

代碼:

Array.prototype.mergeSort = function () {

    const rec = (arr) => {

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

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

        //切分數(shù)組,把每一項都單獨切出來

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

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

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

        //有序的左邊數(shù)組

        const orderLeft = rec(left);

        //有序的右邊數(shù)組

        const orderRight = rec(right);

        //定義一個數(shù)組來存放順序數(shù)組

        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);

    //拷貝到數(shù)組本身

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

}

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

arr.mergeSort();

console.log(arr);


5.快速排序

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

圖示

代碼

Array.prototype.quickSort = function () {

    const rec = (arr) => {

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

       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]);

           }

       }

        //遞歸調(diào)用,最后放回數(shù)組   

       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是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務費用、相關報表等業(yè)務管理,結合碼頭的業(yè)務特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved