零:數(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次