js實現氣泡排序和快速排序
阿新 • • 發佈:2019-01-25
氣泡排序
- 1.比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
- 2.對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
- 3.針對所有的元素重複以上的步驟,除了最後一個。
- 4.持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
用到兩層for迴圈
快速排序function bubbleSort(arr){ for(var i=0;i<arr.length-1;i++){ for (var j = i+1; j < arr.length; j++) { if(arr[i]>arr[j]){ //如果前面的資料比後面的大,則交換他們的順序 var temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } } } return arr; } alert(bubbleSort([20,4,39,45,12]));
1、找基準點(一般是以中間項為基準)
2、遍歷陣列,小於基準的放在left,大於基準的放在right
3、遞迴
//把要排序的陣列作為引數傳進去 function quickSort(arr){ if(arr.length<=1){ return arr; }//遞迴演算法的終結,一定要指定這個,不然會進入死迴圈 var times=0; var num=Math.floor(arr.length/2);//選擇一個元素作為"基準",即陣列中間的那個元素 var numValue=arr.splice(num,1); //返回的是基準點的值,注意:這個方法已經把原先陣列中的這個基準點給刪掉了,最後要重新拼接到一起 //建立兩個陣列,分別來存放基準點兩邊的元素 var left=[]; //左邊 var right=[];//右邊 for(var i=0;i<arr.length;i++){ if(arr[i]<numValue){ left.push(arr[i]);//比基準點小的放在左邊 }else{ right.push(arr[i]);//比基準點大的放在左邊 } } //遞迴操作,將左陣列,基準點,右陣列拼接到一起 /*arguments.callee代表的是quickSort這個函式 arguments包含函式內的所有引數 callee屬性是一個指標,指向擁有這個arguments物件的函式 這樣做可以消除函式名與這個函式之間的耦合性,即使這個演算法換一個名字 也不會對函式的執行造成影響 */ return arguments.callee(left).concat([numValue],arguments.callee(right)); } alert(quickSort([20,4,39,45,12]));