1.冒泡排序(以從小到大為例)
【分析】:冒泡排序的思想就是,兩兩進行比較,第一個元素和第二個元素進行比較,如果第一個元素比第二個元素大,則這兩個元素交換位置,然后第二個元素和第三個元素進行比較,如果第二個元素比第三個元素大,交換位置,依次類推,知道到最后一個元素。在比較的時候,每進行一輪比較,就可以找到當前這一輪的最大值, 我們可以將每一輪找到的最大值放到最后,知道最終剩下兩個值,比較完之后,就可以將當前數列的數據按照從小到大的順序排列好。
以:a=[ 2 , 6 ,8 ,9 ,1 ,2 ] 數列為例。
第一輪: 2 6 8 9 1 2 第二輪: 2 6 8 1 2 第三輪:2 6 1 2 第四輪:1 2 2 第五輪:1 2
2 6 8 9 1 2 2 6 8 1 2 2 1 6 2 1 2 2
2 6 8 9 1 2 2 6 1 8 2 2 1 2 6
2 6 8 1 9 2 2 6 1 2 8
2 6 8 1 2 9
代碼:
var arr = [ 2 , 6 ,8 ,9 ,1 ,2 ];
function bubbleSort(arr) {
//確定輪數
for (var i = 0; i < arr.length; i++) {
//每一輪數值比較
for (var j = i; j < arr.length-1; j++) {
//誰小誰放在前面
if (arr[i] > arr[i + 1]) {
var temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
}
return arr;
}
console.log(bubbleSort(arr));
運行結果: [1, 2, 2, 6, 8, 9]
2. 選擇排序(從小到大排序)
【分析】:選擇排序,遵循的是打擂台的游戲。冠軍只有一個,主要與每個人進行比,最后勝出者為冠軍。第一個人和后面的每個人都要打,誰小誰就放在最前面,然后第二個人和后面的每個人都要打,誰小,誰就是次二,依次類推。
還是以:a=[ 2 , 6 ,8 ,9 ,1 ,2 ] 數列為例。
第一輪: 2 6 8 9 1 2 第二輪:6 8 9 2 2 第三輪:8 9 6 2 第四輪: 8 9 6 第五輪:8 9
2 6 8 9 1 2 6 8 9 2 2 6 9 8 2 6 9 8
2 6 8 9 1 2 2 8 9 6 2 2 9 8 6
1 6 8 9 2 2 2 8 9 6 2
1 6 8 9 2 2
代碼:
arr =[ 2 , 6 ,8 ,9 ,1 ,2 ];
function chooseSort(arr) {
// 確定輪數
for (var i = 0; i < arr.length-1; i++) {
// 每一輪都和第一個進行比較
for (var j = i + 1; j < arr.length; j++) {
// 誰小誰放在前面
if (arr[i] > arr[j]) {
var temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
return arr;
}
console.log(chooseSort(arr));
運行結果: [1, 2, 2, 6, 8, 9]。
3. 快速排序(從小到大排序)
【分析】:將偏中間的數作為基准值,小於它的放在數組的左邊,大於它的放在數組的右邊,一輪比完之后,我們再將左邊的左邊的作為一個數組,右邊的作為一個數組,然后分別找中間的技術,再按上面的方法進行計算(也就是遞歸),直到數組中剩下一個元素(也是循環結束的終止條件)。
代碼:
arr = [2, 6, 8, 9, 1, 2];
function quickSort(arr) {
if(arr.length <= 1) {
return arr;
}
var midIndex = parseInt(arr.length / 2);
var midValue = arr[midIndex];
var leftArr = [];
var rightArr = [];
for(var i=0;i< arr.length;i++) {
if( i== midIndex) {
continue;
}
if(arr[i] < midValue) {
leftArr.push(arr[i]);
}else {
rightArr.push(arr[i]);
}
}
return quickSort(leftArr).concat(midValue).concat(quickSort(rightArr));
}
console.log(quickSort(arr));
運行結果: [1, 2, 2, 6, 8, 9]。
4.常見的還有希爾排序和插入排序,在這里就不做詳細的介紹的。