復習排序算法,首先最最最基礎的就是冒泡排序和插入排序了,而且這個也會經常在面試中被問到,在此做個總結
冒泡排序
比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最后一對。這步做完后,最后的元素會是最大的數。
針對所有的元素重復以上的步驟,除了最后一個。
持續每次對越來越少的元素重復上面的步驟,直到沒有任何一對數字需要比較。
JavaScript實現如下:
function bubbleSort(arr) {
var len = arr.length;
for (var i = 0; i < len - 1; i++) {
for (var j = 0; j < len - 1 - i; j++) {
if (arr[j] > arr[j+1]) { // 相鄰元素兩兩對比
var temp = arr[j+1]; // 元素交換
arr[j+1] = arr[j];
arr[j] = temp;
}
}
}
return arr;
}
插入排序
個人理解,無非就是一個數組,分成兩個部分,一部分是有順序的,一部分是沒有順序的(開始的時候的話,將第一個元素看成是有順序的),然后提出無順序的元素和有順序的部分做比較,然后在合適的地方插入
JavaScript實現:
function insertionSort(arr) {
var len = arr.length;
var preIndex, current;
for (var i = 1; i < len; i++) {
preIndex = i - 1;
current = arr[i];
while(preIndex >= 0 && arr[preIndex] > current) {
arr[preIndex+1] = arr[preIndex];
preIndex--;
}
arr[preIndex+1] = current;
}
return arr;
}
選擇排序
選擇排序,個人理解也是分成兩部分,一部分是有序的,一部分是無順序的,一開始都是無順序的,遍歷完整個數組,找出最小(大)的那個元素,插入有序的其中,然后再接著查找次小(大)的那個數插入有序的中。
JavaScript實現代碼:
function selectionSort(arr) {
var len = arr.length;
var minIndex, temp;
for (var i = 0; i < len - 1; i++) {
minIndex = i;
for (var j = i + 1; j < len; j++) {
if (arr[j] < arr[minIndex]) { // 尋找最小的數
minIndex = j; // 將最小數的索引保存
}
}
temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
return arr;
}