八大排序演算法-簡單排序(3種)
javascript-選擇排序
演算法思想:簡單選擇排序是最簡單直觀的一種演算法,基本思想為每一趟從待排序的資料元素中選擇最小(或最大)的一個元素作為首元素,直到所有元素排完為止,簡單選擇排序是不穩定排序。
在演算法實現時,每一趟確定最小元素的時候會通過不斷地比較交換來使得首位置為當前最小,交換是個比較耗時的操作。其實我們很容易發現,在還未完全確定當前最小元素之前,這些交換都是無意義的。我們可以通過設定一個變數min,每一次比較僅儲存較小元素的陣列下標,當輪迴圈結束之後,那這個變數儲存的就是當前最小元素的下標,此時再執行交換操作即可。程式碼實現很簡單,一起來看下。
function selectSort(arr){ var min;var tmp; var len=arr.length; for(var i=0;i<len;i++){ min=i; for(var j=i+1;j<len;j++){ if(arr[min]>arr[j]){ tmp=arr[j]; arr[j]=arr[min]; arr[min]=tmp; } } } return arr; } var arr1 = [3, 5, 2, 4, 8, 6]; console.log(selectSort(arr1));//[ 2, 3, 4, 5, 6, 8 ]
jacascript-氣泡排序
演算法思想:
氣泡排序(Bubble Sort)也是一種簡單直觀的排序演算法。進行n趟掃描要排序的數列,每一趟比較確定最後一個位置的數,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。這個演算法的名字由來是因為越小的元素會經由交換慢慢“浮”到數列的頂端。
演算法步驟:
1)比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
2)對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。
3)針對所有的元素重複以上的步驟,除了最後一個-即比較一趟確定最後一個數是最大的。
4)持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
function bubbleSort(arr) { var p = arr.length - 1; var tmp, flag; for (var i = p; i > 0; i--) { flag = 0; //每趟的排序後將標識置0 for (var j = 0; j < p; j++) { if (arr[j] > arr[j + 1]) { tmp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = tmp; flag = 1; } } if (flag = 0) break; //全程無交換時退出 } return arr; } var arr1 = [3, 5, 2, 4, 8, 6]; console.log(bubbleSort(arr1));
jacascript-插入排序
主要演算法思想:
插入排序是一種最簡單直觀的排序演算法,它的工作原理是通過構建有序序列,對於每一個未排序資料,在已排序序列中從後向前掃描,找到相應位置並插入。
演算法步驟:
1)將第一待排序序列第一個元素看做一個有序序列,把第二個元素到最後一個元素當成是未排序序列。
2)從頭到尾依次掃描未排序序列,將掃描到的每個元素插入有序序列(從後到前掃描,如果當前元素小於(保證當前位置最大)掃描元素,則交換位置)的適當位置。(如果待插入的元素與有序序列中的某個元素相等,則將待插入元素插入到相等元素的後面。)
//從小到大
function insertSort(arr){
var len=arr.length;
var tmp;
for(var i=1;i<len;i++){
for(var j=i;j>0&&arr[j]<arr[j-1];j--){
tmp=arr[j];
arr[j]=arr[j-1];
arr[j-1]=tmp;
}
}
return arr;
}
var arr1 = [3, 5, 2, 4, 8, 6];
console.log(insertSort(arr1));//[ 2, 3, 4, 5, 6, 8 ]