JavaScript四種基礎的排序方法

冒泡排序

思路:

1.依次比較相鄰的兩個數,如果第一個比第二個小,不變。如果第一個比第二個大,交換順序。一輪下來,最後一個是最大的數
2.對除了最後一個之外的數重複第一步,直到只剩一個數

在這裏插入圖片描述
 

function bubbleSort(arr) {
        var temp;
        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]) {
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
        return arr
    }


快速排序

思路:

1.將數組中間的數設爲基準,比基準小的放到左邊,比基準大的放到右邊
2.再按此方法對這兩部分數據分別進行快速排序(遞歸)
3.不能再分後退出遞歸,並重新將數組合並

 在這裏插入圖片描述

圖片是分倆次進行排序,其實是同時進行的

function quickSort(arr) {
        if (arr.length <= 1) { //數組長度爲1的時候結束遞歸
            return arr;
        }
        var criterionIndex = Math.floor(arr.length / 2);//獲取基準索引
        var criterion = arr.splice(criterionIndex, 1)[0];//截取基準
        var left = [];
        var right = [];
        for (var i = 0; i < arr.length; i++) {
            if (arr[i] < criterion) {
                left.push(arr[i]);
            } else {
                right.push(arr[i]);
            }
        }
        return quickSort(left).concat([criterion], quickSort(right));
    }


選擇排序

思路:

1.找出最小的數,和第一個交換位置
2.在剩下的數中,找出最二小的數,放在第二個
3.以此類推

在這裏插入圖片描述

function selectionSort(arr) {
        for (var i = 0; i < arr.length - 1; i++) {
            var min = arr[i];//當前排序的值
            var minIndex = i;//保存這個索引
            for (var j = i + 1; j < arr.length; j++) {
                if (min > arr[j]) {
                    min = arr[j]; //將這個最小值保存
                    minIndex = j; //索引換成最小值的索引
                }
            }
            arr[minIndex] = arr[i]; //需先將排序的值換給最小值的位置
            arr[i] = min ;    // 再將最小值給排序的值
        }
        return arr;
    }


插入排序

基本思路:

1.把數組分爲已排序和未排序兩個數組,第一個數爲[已排序],其餘爲[未排序]
2.從[未排序]抽出第一個數,和[已排序]部分比較,插入到合適的位置

function insertionSort(arr) {
        var value;
        for (var i = 0; i < arr.length; i++) {
            value = arr[i];//儲存當前的值
            for (var j = i - 1; j > -1 & arr[j] > value; j--) {
                //  當已排序部分的當前元素大於value,
                //  就將當前元素向後移一位,再將前一位與value比較
                //  直到value小於比較的值或者到數組最開頭停止
                arr[j + 1] = arr[j];
            }
            arr[j + 1] = value;
        }
        return arr;
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章