* 一:冒牌排序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));