冒泡排序:
每次對比相鄰兩個數據的大小,升序小的拍前面,若前一個數比後一個數大,則交換兩數位置。須要兩次for
循環遍歷.數組
優勢:簡單ui
缺點:時間複雜度高,運行效率低下code
function sortArr(arr){ var temp; for(var i=0;i<arr.length-1;i++){ for(var j=i+1;j<arr.length;j++){ if(arr[i] > arr[j]){ times++; temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } console.log("第"+(++times)+"次排序後:"+arr); } } return arr; } var times = 0; sortArr([2,5,4,1,7,3,8,6,9,0]); out :[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
快速排序:
先找到一個基準點(通常數組中部),數組即被分爲兩部分,依次與基準點數據比較,比它小的,放左邊,比它大的放右邊,左右分別用一個空數組去存儲比較後的數據,最後執行上述操做,知道數組長度<=1;排序
優勢:快速經常使用遞歸
缺點:須要額外申明兩個數組,浪費了內存空間資源內存
var times = 0; var quickSort = function(arr){ if(arr.length<=1){//遞歸結束條件 return arr; } var midIndex = Math.floor(arr.length/2);//找基準點 var midIndexVal = arr.splice(midIndex,1);//取基準點的值 var left = []; var right = []; for(var i=0;i<arr.length;i++){ if(arr[i]<midIndexVal){ left.push(arr[i]); } else{ right.push(arr[i]); } console.log("第"+(++times)+"次排序後:"+arr); } return quickSort(left).concat(midIndexVal,quickSort(right));//遞歸執行 } quickSort([2,5,4,1,7,3,8,6,9,0]); out:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]