【面試篇】JS的經常使用排序算法

冒泡排序:
每次對比相鄰兩個數據的大小,升序小的拍前面,若前一個數比後一個數大,則交換兩數位置。須要兩次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]
相關文章
相關標籤/搜索