快速排序算法

x参考值,左右两边开始扫,左找出>=x的第一个值,右边找出第一个<= x的值,进行交换。交换后,右边区间值都满足大于X,左边的值都满足小于X。

class Quicksort {
   static void qsort(int items[]) {
      qs(items, 0, items.length-1);
   }

   private static void qs(int items[], int left, int right)
   {
      int i, j;
      int x, y;

      i= left; j=right;
      x=items[(left+right)/2];
  //do-while解决一次完整分区,左边的x小,右边的比x大。
   do{
         while((items[i] < x)&& (i< right))
            i++;
         while((x<items[j])&& (j>left))
            j--;

         if(i <= j) {//i=j 自己跟自己换,改变了i,j值 跳出循环
            y= items[i];
            items[i]= items[j];
            items[j]=y;
            i++;
            j--;
         }
      }while( i<= j);

//完成一次完整分区do-while后,在进行递推
      if( left < j)
         qs(items, left, j);
      if( i < right)
         qs(items, i, right);

   }
}

class QSDemo {
   public static void main(String args[]) {
      int a[]={1,2,4,5,6,3,3,8};


      System.out.print("Original array: ");
      for (int i: a)
         System.out.print(i+" ");
      System.out.println();

      //now, sort the array
      Quicksort.qsort(a);

      System.out.print("Sorted array: ");
      for(int i: a)
         System.out.print(i+" ");
      System.out.println();
   }
}


点赞