* 一:冒牌排序1思想:冒泡排序思想:每一次對比相鄰兩個數據的大小,小的排在前面,如果前面的數據比后面的大就交換這兩個數的位置
要實現上述規則需要用到兩層for循環,外層從第一個數到倒數第二個數,內層從外層的后面一個數到最后一個數
2特點:排序算法的基礎。簡單實用易於理解,缺點是比較次數多,效率較低。
var arr=[2,5,4,1,7,3,8,6,9,0]; function arrayMax(arr) { var temp = null; for (var i = 0;i<arr.length-1;i++){ for (var j = i+1;j<arr.length;j++){ if (arr[i]>arr[j]){//如果前面的數據比后面的大就交換 兩個數交換一定要聲明一個變量,用來存儲其中要被賦值的那個 temp = arr[j]; arr[j] = arr[i]; arr[i] = temp; } } } return arr; }
console.log(arrayMax(arr));
/**
*
* 二:快速排序
1思想:快速排序思想:先找到一個基准點(一般指數組的中部),然后數組被該基准點分為兩部分,依次與該基准點數據比較,如果比它小,放左邊;反之,放右邊。
左右分別用一個空數組去存儲比較后的數據。最后遞歸執行上述操作,直到數組長度<=1;
2特點:快速,常用。缺點是需要另外聲明兩個數組,浪費了內存空間資源
*
* ***/
var times = 0; function queryArrayMax(arr) { //如果數組長度小於等於1無需判斷直接返回即可 if (arr.length<=1){ return arr; } var arrIndex = Math.floor(arr.length/2);//獲取中間值 這個是索引 var arrCenterVal = arr.splice(arrIndex,1);// 利用索引取出中間值 改變原始數組 var left= [],//存儲小的 right = [];//存儲大的 // 遍歷數組 ,進行判斷分配 for (var i = 0;i<arr.length;i++){ if (arr[i]<arrCenterVal){ left.push(arr[i])//比中間值小的放在左邊數組 }else{ right.push(arr[i])//比中間值大的放在右邊數組 } console.log("第"+(++times)+"次排序后:"+arr); } //遞歸執行以上操作,對左右兩個數組進行操作,直到數組長度為<=1; return queryArrayMax(left).concat(arrCenterVal,queryArrayMax(right)) } console.log(queryArrayMax(arr));