java实现快速排序

/**
 * 快速排序
 */
public class QuickSort {
  public static void main(String[] args) {
    /**
     * 定义一个无序数列
     */
    int[] arr = {22,1,9,67,33,31,17};
    System.out.println("排序前:"+ Arrays.toString(arr));
    /**
     * 调用快速排序方法
     */
    quickSort(arr,0,arr.length-1);
    /**
     * 输出排序后结果
     */
    System.out.println("排序后:"+Arrays.toString(arr));
  }

  /**
   * 快速排序方法
   */
  static void quickSort(int[] arr,int leftIndex,int rightIndex){
    if (leftIndex < rightIndex){
      /**
       * 先挖坑填数调整数组
       */
      int i = AdjuestArray(arr,leftIndex,rightIndex);
      /**
       * 递归调用
       */
      quickSort(arr,leftIndex,i - 1);
      quickSort(arr,i + 1,rightIndex);
    }
  }
  /**
   * 快速排序方法之--挖坑填数
   * 待排序数组 arr
   * 左指针 leftIndex
   * 右指针 rightIndex
   */
  static int AdjuestArray(int[] a,int leftIndex,int rightIndex){
    int i = leftIndex;
    int j = rightIndex;
    /**
     * 假设数组中的左指针位置的数为第一个挖掉的数字
     */
    int x = a[i];
    //左指针小于右指针才有必要进行排序
    while (i < j){
      /**
       * 右指针从后往前找比挖掉的数字小或等于的数来填坑
       */
      while (i < j && a[j] >= x){
        //右指针左移
        j--;
        }
      if (i < j){
        //找到了比挖掉的数大的数a[j],就把a[j]挖掉来填第一个被挖掉的数的坑,a[j]就变成了新的坑
        a[i] = a[j];
        i++;
        /**
         * 左指针从左往右移动,找比挖掉的数大或等于的数字
         */
        while (i < j && a[i] <= x){
          //左指针右移
          i++;
        }
        if (i < j){
          //a[i]填入a[j]的坑,a[i]形成新的坑
          a[j] = a[i];
          j--;
        }
      }
    }
    //当i = j时,退出循环,将x填回最后的坑
    a[i] = x;
    return i;
  }
}

运行结果:

原文地址:https://www.cnblogs.com/sinoaccer/p/12122026.html