JavaScript常用排序演算法總結
阿新 • • 發佈:2018-12-15
(一)氣泡排序
原理:
比較相鄰的元素,如果第一個比第二個大,就交換他們兩個; 對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對; 在這一點,最後的元素應該會是最大的數; 針對所有的元素重複以上的步驟,除了最後一個; 持續每次對越來越少的元素重複上面的步驟, 直到沒有任何一對數字需要比較。
function bubbleSort(arr){ console.time('time:') var len = arr.length; for(var j = 0 ; j < len ; j++){//n個元素需要迴圈n次 for(var k = 0 ; k < len - j - 1 ; k++ ){//每次找到的元素都會排到末尾,所以k每次都從0開始,外層迴圈每次可以找到一個正確的元素,所以內迴圈只需要 len-j 次,為了防止陣列越界,所以還要減一 if(arr[k] > arr[k+1]){//順序不對,兩個元素交換 var t = arr[k]; arr[k] = arr[k+1]; arr[k+1] = t; } } } console.timeEnd('time:'); return arr; }
(二)簡單選擇排序
原理:
簡單選擇排序的基本思想:給定陣列:int[] arr={裡面n個數據}; 第1趟排序,在待排序資料arr[1]~arr[n]中選出最小的資料, 將它與arrr[1]交換;第2趟, 在待排序資料arr[2]~arr[n]中選出最小的資料,將它與r[2]交換; 以此類推,第i趟在待排序資料arr[i]~arr[n]中選出最小的資料, 將它與r[i]交換,直到全部排序完成。
function selectionSort(arr){ console.time('time:') var len = arr.length; for(var i = 0 ; i < len ; i++){//n個元素,就有n個位置,需要迴圈n次 for(var j = i ; j < len ; j++){//選擇排序每次都會找到一個正確的元素放到前面,所以第二層索引從i開始,需要和剩下的所有的元素比較,所以 j < len if(arr[i] > arr[j]){//i是待比較的位置,分別和未排序的所有元素比較,順序不對的就交換 var t = arr[i]; arr[i] = arr[j]; arr[j] = t; } } } console.timeEnd('time:'); return arr; }