예제 #1
0
파일: Quick.java 프로젝트: JDatta/SandBox
  // partitions the array using the first element as pivot
  public static int partition(final int a[], final int lo, final int hi) {

    int i = lo;
    int j = hi + 1;
    while (true) {
      while (a[++i] < a[lo]) {
        if (i == hi) {
          break;
        }
      }

      while (a[--j] > a[lo]) {
        if (j == lo) {
          break;
        }
      }

      if (i >= j) {
        break;
      }

      IntUtils.swap(a, i, j);
    }
    IntUtils.swap(a, lo, j);
    // System.out.println("j="+j);
    return j;
  }
예제 #2
0
파일: Quick.java 프로젝트: JDatta/SandBox
  public static void threeWayQuickSort(final int a[], final int lo, final int hi) {
    if (lo > hi) {
      return;
    }

    final int pivot = a[lo];
    int lt = lo;
    int gt = hi;
    int i = lo;

    while (i <= gt) {
      if (pivot > a[i]) {
        IntUtils.swap(a, i++, lt++);
      } else if (pivot < a[i]) {
        IntUtils.swap(a, i, gt--);
      } else {
        i++;
      }
    }
    threeWayQuickSort(a, lo, lt - 1);
    threeWayQuickSort(a, gt + 1, hi);
  }