前端開發:javascript數組排序

JavaScript 鵝是程序猿 2019-07-14

在面試時候,會經常考到排序算法,下面列舉javascript常用的排序算法。

前端開發:javascript數組排序

javascript

冒泡排序

通過相鄰兩個元素之間的比較和交換,使較大的元素逐漸從前面移向後面(升

序),就像水底下的氣泡一樣逐漸向上冒泡,所以被稱為“冒泡”排序。冒泡排序的最壞時間複雜度為O(n2),平均時間複雜度為O(n2)。

代碼演示:

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));

快速排序

元素的比較和交換是從兩端向中間進行的,較大的元素一輪就能夠交換到後面的位置,而較小的元素一輪就能交換到前面的位置,元素每次移動的距離較遠,所以比較次數和移動次數較少,速度較快,故稱為“快速排序”。

代碼演示:

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));

歡迎大家轉發和關注,後面將繼續發佈一些基礎教程。

相關推薦

推薦中...