JavaScript常用兩種常用排序算法

零:數(shù)據(jù)準備,給定數(shù)組arr=[2,5,4,1,7,3,8,6,9,0];

一:冒泡排序

1思想:冒泡排序思想:每一次對比相鄰兩個數(shù)據(jù)的大小,小的排在前面,如果前面的數(shù)據(jù)比后面的大就交換這兩個數(shù)的位置
要實現(xiàn)上述規(guī)則需要用到兩層for循環(huán),外層從第一個數(shù)到倒數(shù)第二個數(shù),內(nèi)層從外層的后面一個數(shù)到最后一個數(shù)

2特點:排序算法的基礎(chǔ)。簡單實用易于理解,缺點是比較次數(shù)多,效率較低。

3實現(xiàn):

var bubbleSort=function(arr){  
    for(var i=0;i<arr.length-1;i++){  
        for(var j=i+1;j<arr.length;j++){  
            if(arr[i]>arr[j]){//如果前面的數(shù)據(jù)比后面的大就交換  
                var temp=arr[i];  
                arr[i]=arr[j];  
                arr[j]=temp;  
            }   
        }  
    }   
    return arr;  
}  

4效率:數(shù)組長度10,排序次數(shù)45次

二:快速排序

1思想:快速排序思想:先找到一個基準點(一般指數(shù)組的中部),然后數(shù)組被該基準點分為兩部分,依次與該基準點數(shù)據(jù)比較,如果比它小,放左邊;反之,放右邊。
左右分別用一個空數(shù)組去存儲比較后的數(shù)據(jù)。最后遞歸執(zhí)行上述操作,直到數(shù)組長度<=1;

2特點:快速,常用。缺點是需要另外聲明兩個數(shù)組,浪費了內(nèi)存空間資源。

3實現(xiàn):

var quickSort=function(arr){   
    //如果數(shù)組長度小于等于1無需判斷直接返回即可  
    if(arr.length<=1){  
        return arr;  
    }  
    //取基準點 
    var midIndex=Math.floor(arr.length/2);
    //取基準點的值,splice(index,1)函數(shù)可以返回數(shù)組中被刪除的那個數(shù)arr[index+1]
    var midIndexVal=arr.splice(midIndex,1);  
    var left=[];//存放比基準點小的數(shù)組  
    var right=[];//存放比基準點大的數(shù)組  
    //遍歷數(shù)組,進行判斷分配  
    for(var i=0;i<arr.length;i++){  
        if(arr[i]<midIndexVal){  
            left.push(arr[i]);//比基準點小的放在左邊數(shù)組  
        }  
        else{  
            right.push(arr[i]);//比基準點大的放在右邊數(shù)組  
        }  
    }  
    //遞歸執(zhí)行以上操作,對左右兩個數(shù)組進行操作,直到數(shù)組長度為<=1;  
    return quickSort(left).concat(midIndexVal,quickSort(right));  
}; 

4效率:數(shù)組長度10,排序次數(shù)22次

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容