明明169473

最优快速排序

最优快速排序

 

[核心思路]  定义f=数组的最后一个元素 使用双指针,左指针永远指向《比f大的最后一个元素的前一个》,右指针永远指向《比f大的第一个元素的前一个》当 [ r<f ] 时 左指针自加1 并且与r交换位置,右指针从开始位置遍历到结束位置,遍历结束后 交换 l+1 与 r 的元素;

 

public static void quickSort(int[] arr,int start,int end){
   //代码核心逻辑
   if(start<end){
       int q = partition(arr,start,end);
  quickSort(start,q-1);
  quickSort(q+1,end);
  }
}


public static void partition(int[] arr,int start,int end){
   int f = arr[end];
   //左指针
   int l = start-1;
   for(int r = start ; r < end ; i++){
       if(arr[r]<f){
           l+=1;
           swap(arr,l,r)
      }
  }
   swap(arr,l+r,end);
   return l+1;
}

public static void swap(int[] arr,int l,int r){
   int tmp = arr[l];
   arr[l] = arr[r];
   arr[r] = tmp;
}

posted on 2021-09-09 09:46  明明169473  阅读(167)  评论(0编辑  收藏  举报

导航