js 兩種快排實現方式

"快速排序"的思想很簡單,整個排序過程只需要三步:

(1)在數據集之中,選擇一個元素作爲"基準"(pivot)。

(2)所有小於"基準"的元素,都移到"基準"的左邊;所有大於"基準"的元素,都移到"基準"的右邊。

(3)對"基準"左邊和右邊的兩個子集,不斷重複第一步和第二步,直到所有子集只剩下一個元素爲止。

第一種

借用阮一峯老師的文章,選擇一個基準,以數組的中間值爲例,創建兩個子集,循環,小於中間值的放入左子集,大於中間值的放入右子集,然後遞歸將左子集和右子集再次分割子集,最後拼接成新的數組

function quickSort (arr) {

  if (arr.length <= 1) { return arr; }

  var pivotIndex = Math.floor(arr.length / 2);

  var pivot =## 標題 arr.splice(pivotIndex, 1)[0];//splice剔除中間值,防止判斷時重複存入數組

  var left = [];

  var right = [];

  for (var i = 0; i < arr.length; i++){

    if (arr[i] < pivot) {

      left.push(arr[i]);

    } else {

      right.push(arr[i]);

    }

  }

  return quickSort(left).concat([pivot], quickSort(right));

};

第二種

同樣是選取基準,以數組第一位爲基準,逆向循環數組,當基準比循環的元素大時,二者互換,記住下標,然後正向循環,當基準比循環的元素小,二者互換,記住下標,遞歸循環,按照上次的下標繼續循環,直到兩個下標相等。
在這裏插入圖片描述

function swap(arr,low,high){
			var temp = arr[low];
			arr[low] = arr[high];
			arr[high] = temp; 
			return arr
		}
function quickSort(arr,low,high){
        var key=arr[low];
        
        var start=low;
        
        var end=high;
        
        while(end>start){
        
            while(end>start&&arr[end]>=key) {end--} 
            
            	swap(arr,start,end)
            	
            while(end>start&&arr[start]<=key){ start++;}
            
            	swap(arr,start,end)
        }
        if(start>low) quickSort(arr,low,start-1)
        
        if(end<high) quickSort(arr,end+1,high);
        
        return arr
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章