<a1, a2, ..., an>
<a1', a2', ..., an'>
,知足a1' <= a2' <= ... <= an'
插入排序的工做方式像許多人排序一手撲克牌:數組
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
function insertionSort(iArr) {
var oArr = [iArr[0]];
var n = iArr.length;
// 從左邊開始,每次拿一個與已排列好的數組進行比較
for (var i = 1; i < n; i++) {
for (var j = 0; j < i; j++) {
if (iArr[i] <= oArr[j]) {
// 若介於小於該元素,則插入其前方
oArr.splice(j,
0, iArr[i]);
break;
}
else if (j === i - 1) {
// 若比最後一個還大,則排在最右側
oArr.push(iArr[i]);
}
}
}
return oArr;
}
|
1
2
3
4
5
|
insertionSort([
5, 2, 4, 6, 1, 3]);
// 輸出[1, 2, 3, 4, 5, 6]
insertionSort[
5, 2, 12, 2, 134, 1, 3, 34, 4, 6, 1, 3]);
// 輸出[1, 1, 2, 2, 3, 3, 4, 5, 6, 12, 34, 134]
|
這裏在一個數組中進行插入排序:spa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
function insertionSort(iArr) {
var n = iArr.length;
// 從第一個元素開始,該元素能夠認爲已經被排序
for (var i = 1; i < n; i++) {
// 取出下一個元素,在已經排序的元素序列中從後向前掃描
for (var j = i - 1; j >= 0; j--) {
if (iArr[i] >= iArr[j]) {
// 若是該元素(已排序)小於新元素,將新元素插入該元素下一位置
iArr.splice(j +
1, 0, iArr.splice(i, 1)[0]);
break;
}
else if (j === 0) {
// 若是已經是最小元素,則插入最左側
iArr.splice(j,
0, iArr.splice(i, 1)[0]);
}
}
}
return (iArr)
}
|
1
2
3
4
5
|
insertionSort([
5, 2, 4, 6, 1, 3]);
// 輸出[1, 2, 3, 4, 5, 6]
insertionSort[
5, 2, 12, 2, 134, 1, 3, 34, 4, 6, 1, 3]);
// 輸出[1, 1, 2, 2, 3, 3, 4, 5, 6, 12, 34, 134]
|