冒泡排序
思路:
1.依次比較相鄰的兩個數,如果第一個比第二個小,不變。如果第一個比第二個大,交換順序。一輪下來,最後一個是最大的數
2.對除了最後一個之外的數重複第一步,直到只剩一個數
function bubbleSort(arr) {
var temp;
for (var i = 0; i < arr.length - 1; i++) {
for (var j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return arr
}
快速排序
思路:
1.將數組中間的數設爲基準,比基準小的放到左邊,比基準大的放到右邊
2.再按此方法對這兩部分數據分別進行快速排序(遞歸)
3.不能再分後退出遞歸,並重新將數組合並
圖片是分倆次進行排序,其實是同時進行的
function quickSort(arr) {
if (arr.length <= 1) { //數組長度爲1的時候結束遞歸
return arr;
}
var criterionIndex = Math.floor(arr.length / 2);//獲取基準索引
var criterion = arr.splice(criterionIndex, 1)[0];//截取基準
var left = [];
var right = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i] < criterion) {
left.push(arr[i]);
} else {
right.push(arr[i]);
}
}
return quickSort(left).concat([criterion], quickSort(right));
}
選擇排序
思路:
1.找出最小的數,和第一個交換位置
2.在剩下的數中,找出最二小的數,放在第二個
3.以此類推
function selectionSort(arr) {
for (var i = 0; i < arr.length - 1; i++) {
var min = arr[i];//當前排序的值
var minIndex = i;//保存這個索引
for (var j = i + 1; j < arr.length; j++) {
if (min > arr[j]) {
min = arr[j]; //將這個最小值保存
minIndex = j; //索引換成最小值的索引
}
}
arr[minIndex] = arr[i]; //需先將排序的值換給最小值的位置
arr[i] = min ; // 再將最小值給排序的值
}
return arr;
}
插入排序
基本思路:
1.把數組分爲已排序和未排序兩個數組,第一個數爲[已排序],其餘爲[未排序]
2.從[未排序]抽出第一個數,和[已排序]部分比較,插入到合適的位置
function insertionSort(arr) {
var value;
for (var i = 0; i < arr.length; i++) {
value = arr[i];//儲存當前的值
for (var j = i - 1; j > -1 & arr[j] > value; j--) {
// 當已排序部分的當前元素大於value,
// 就將當前元素向後移一位,再將前一位與value比較
// 直到value小於比較的值或者到數組最開頭停止
arr[j + 1] = arr[j];
}
arr[j + 1] = value;
}
return arr;
}