单向扫描快速排序

网上大部分快速排序算法都是依据《算法导论》来实现的,无一例外都是左右指针各走一步来实现快速排序。我觉得这种不是那么的好理解,而使用单向扫描要更好理解一点。

public class QuickSortTest {

  public static void main(String[] args) {
    int[] arr = {2,1,6,1,4};
    quickSort(arr, 0, arr.length - 1);
    print(arr);
  }

  private static void print(int[] arr) {
    for (int i = 0; i < arr.length; i++) {
      System.out.print(arr[i] + " ");
    }
  }

  private static void quickSort(int[] arr, int p, int r) {
    if (p < r) {
      int q = partition(arr, p, r);
      quickSort(arr, p, q - 1);
      quickSort(arr, q + 1, r);
    }
  }

  private static int partition(int[] arr, int pivot, int r) {
    int p = pivot + 1;
    int bigger = r;
    while (p <= bigger) {
      if (arr[p] <= arr[pivot]) {
        p++;
      } else {
        swap(arr, p, bigger);
        bigger--;
      }
    }
    //最后还要一次交换
    swap(arr, pivot, bigger);
    return bigger;
  }

  private static void swap(int[] arr, int p, int bigger) {
    //交换元素
    int t = arr[p];
    arr[p] = arr[bigger];
    arr[bigger] = t;
  }
}

你可能感兴趣的:(算法-数据结构)