冒泡排序: 重複訪問數列,一次比較相鄰兩個元素,如果前一個元素比後一個元素大,那麼交換他們的順序,多次交換之後得出正確排序。
假設有這樣一個數組[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]