算法導論之js實現--冒泡排序

冒泡排序


排序問題

  • 輸入:n個數的一個序列<a1, a2, ..., an>
  • 輸出:輸入序列的一個排列<a1', a2', ..., an'>,知足a1' <= a2' <= ... <= an'

思路

  1. 比較相鄰的元素。若是第一個比第二個大,就交換他們兩個。
  2. 對每一對相鄰元素做一樣的工做,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
  3. 針對全部的元素重複以上的步驟,除了最後一個。
  4. 持續每次對愈來愈少的元素重複上面的步驟,直到沒有任何一對數字須要比較。

js實現

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function bubbleSort(iArr) {
// 交換函數
function swap(arr, i, j) {
var temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
var n = iArr.length;
// 從左邊開始
for (var i = 0; i < n; i++) {
// 每次冒泡完畢,右側新固定一個較大值
for (var j = 1; j < n - i ; j++) {
// 比較,交換大的於右側
if (iArr[j - 1] > iArr[j]) {
swap(iArr, j - 1, j);
} else {
continue;
}
}
}
return iArr;
}

驗證

1
2
3
4
5
6
7
8
insertionSort([ 5, 2, 4, 6, 1, 3]);
// 輸出[1, 2, 3, 4, 5, 6]
 
insertionSort([ 2, 1, 3, 1, 5]);
// 輸出[1, 1, 2, 3, 5]
 
insertionSort([ 5, 2, 12, 2, 134, 1, 3, 34, 4, 6, 1, 3, 4]);
// 輸出[1, 1, 2, 2, 3, 3, 4, 4, 5, 6, 12, 34, 134]
相關文章
相關標籤/搜索