前端數組排序冒泡排序;選擇排序;插入排序

冒泡排序: 重複訪問數列,一次比較相鄰兩個元素,如果前一個元素比後一個元素大,那麼交換他們的順序,多次交換之後得出正確排序。

假設有這樣一個數組[7, 3, 6, 1, 9, 2, 5, 4, 0, 8],使用冒泡排序進行排序,每次循環從最後一個元素開始,相鄰的兩個元素進行比較,如果前一個元素大於後一個元素,則兩者互換

第一次排序的結果爲[7, 3, 6, 1, 9, 2, 5, 4, 0, 8],其實就是把最小的元素0放到數組的第一個

第二次排序的結果爲[0, 1, 7, 3, 6, 2, 9, 4, 5, 8],其實就是把第二小的元素1放到數組的第二個

第三次排序的結果爲[0, 1, 2, 7, 3, 6, 4, 9, 5, 8],其實就是把第三小的元素3放到數組的第三個

以此類推即可得出最終結果

sortArray:[7, 3, 6, 1, 9, 2, 5, 4, 0, 8]
//冒泡排序
for (let i = 0; i < this.sortArray.length; i++) {
     for (let j = this.sortArray.length - 1; j > i; j--) {
          if (this.sortArray[j] < this.sortArray[j - 1]) {
                let temp = this.sortArray[j];
                this.sortArray[j] = this.sortArray[j - 1];
                this.sortArray[j - 1] = temp;
           }
      } 
}

console.info(this.sortArray);//[0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

選擇排序:每一次從待排序的數列中選出最大或最小的元素放到起始位置

假設有數組[3, 7, 6, 1, 9, 2, 5, 4, 0, 8],選擇排序每次循環會假設一個最小值,然後找到真正的最小值再與其交換。

我們假設數組中最小的元素爲第一個元素3,經過第一次排序發現真正最小的是最後一個元素0, 第一次排序的結果爲[0, 7, 6, 1, 9, 2, 5, 4, 3, 8]

我們假設數組中最小的元素爲第二個元素7,經過第二次排序發現真正最小的是第四個元素1,所以第二次排序的結果爲[0, 1, 6, 7, 9, 2, 5, 4, 3, 8]

我們假設數組中最小的元素爲第3個元素6,經過第二次排序發現真正最小的是最後一個元素3,所以第三次排序的結果爲[0, 1, 2, 7, 9, 6, 5, 4, 3, 8]

//選擇排序
for (let i = 0; i < this.sortArray.length; i++) {
     // 假設最小值的下標爲i
     let min = i;
     // 查找當次循環中真正的最小值下標
    for (let j = i + 1; j < this.sortArray.length; j++) {
        if (this.sortArray[min] > this.sortArray[j]) {
             min = j;
         }
    }
    // 交換
    let temp = this.sortArray[i];
    this.sortArray[i] = this.sortArray[min];
    this.sortArray[min] = temp;
}
console.info(this.sortArray);//[0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

插入排序:

可以把插入算法想象成一個拔蘿蔔的遊戲,有一串蘿蔔[3, 7, 6, 1, 9, 2, 5, 4, 0],使用插入排序進行排序。

第一次排序,把蘿蔔7拔出來,因爲蘿蔔3比蘿蔔7要小,所以把蘿蔔3放到蘿蔔7前面,結果就爲[3, 7, 6, 1, 9, 2, 5, 4, 0, 8]

第二次排序,把蘿蔔6拔出來,因爲蘿蔔6大於蘿蔔3,但是蘿蔔6小於蘿蔔7,所以把蘿蔔6放在蘿蔔3後面,蘿蔔7前面,結果爲[3, 6, 7, 1, 9, 2, 5, 4, 0, 8]

第三次排序,把蘿蔔1拔出來,因爲蘿蔔1小於蘿蔔3,所以把蘿蔔1放到蘿蔔3前面,結果爲[1, 3, 6, 7, 9, 2, 5, 4, 0, 8]

按照以上規律以此類推即可得到最終排序[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

let array = [3, 7, 6, 1, 9, 2, 5, 4, 0, 8];
    for (let i = 1; i < array.length; i++) {
         let j;
         let temp = array[i];
         for (j = i; j > 0 && array[j - 1] > temp; j--) {
             array[j] = array[j - 1];
         }
         array[j] = temp;
}
console.log(array);//[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

 

發佈了56 篇原創文章 · 獲贊 11 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章