針對排序算法總結整理如下:
1.冒泡排序
1)一列數組,從元素第一個位置 0 開始比較相鄰 i+1位置的元素,如果大于它,那么交換位置,起始位置i++,繼續比較到i+1的元素。重復進行直到 i+1 == 數組長度 時結束循環?,F在最后一個元素為最大值。(內層循環 目標:找到最大)
2)len-1,刨去最后一個元素即當前最大元素,繼續從i = 0 開始 重復執行(1)步 直到 len = 0時 結束循環(外層循環 目標:重復找到第二個、第三個...最大元素)
function bubbleSort(arr) {
var len = arr.length, i = 0,temp;
while(--len) {
while (i < len) {
if(arr[i] > arr[i+1]) {
temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
i++;
}
i = 0;
}
return arr;
}
2.選擇排序
1)從第0個元素開始初始假設第一個最小元素索引為0, 從i+1個元素開始循環到len直到找到更小的數則交換索引,否則保持不變, (內層循環 目標:找到最小的數的索引)
2)如果初始設定的索引不是最小數那么交換元素
3)從i+1開始直到 <len-1 重復進行(1)、(2)
function selectSort(arr) {
var len = arr.length,min, temp;
for ( var i = 0; i < len - 1; i++ ) {
min= i;
for ( var j = i + 1; j < len; j++ ) {
if ( arr[j] < arr[min] ) { //找到更小的數
min= j; //保存當前最小的索引
}
}
if( i != min ){//如果不是當前最小則交換
temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
return arr;
}
3.插入排序
1)假定第0個元素為排序好的有序隊列,從第1個元素開始,向當前有序隊列從后向前一一比較,直到有一個元素大于它則將該元素前移
function insertSort(arr){
var len = arr.length;
for (var i = 1; i < len; i++) {
var temp= arr[i];
var j = i - 1;
while (j >= 0 && arr[j] > temp) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = temp;
}
return arr;
}