快速排序手撕模板(遞歸)

void quicksort(vector<int> arr,int left,int right)
{
   if(right<left){
       return;
   }
   int low=left;
   int high=right;
   int base=arr[low];  //以最左邊的第一個爲基準數
//採用雙指針方法
   while(low<left){
       while(high){
           if(high<=low) break;
           if(arr[high]>base){ //右邊的數大於基準數,指針就減減
               high--;
           }else{
               arr[low]=arr[high]; //與low交換位置
               break;
           }
       }
       while(low){
           if(high<=low) break;
           if(arr[low]<base){
               low--;
           }else{
               arr[high]=arr[low];
               break;
           }
       }
   }
   if(low==high){
       arr[low]=base;
   }
   quicksort(arr,left,low-1);
   quicksort(arr,low+1,right);
}
  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章