Exemple #1
0
  // 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;
  }
Exemple #2
0
  public static void test_threeWayQuickSort() {
    final int a[] = IntUtils.genRandIntArray(10, 12, 10);
    // IntUtils.printArray(a);

    final long t1 = System.currentTimeMillis();
    threeWayQuickSort(a, 0, a.length - 1);
    final long t2 = System.currentTimeMillis();
    // IntUtils.printArray(a);

    System.out.println("3-WAY SORT: Time taken = " + (t2 - t1));
    System.out.println("Is resulting array Sorted? " + IntUtils.isSorted(a));
  }
Exemple #3
0
  public static void test_select() {
    final int a[] = IntUtils.genRandIntArray(0, 4, 100);
    // IntUtils.printArray(a);
    System.out.println("Array generated.");

    final int k = 5;
    select(a, k);
    System.out.println("Select done.");
    // IntUtils.printArray(a);

    System.out.println(k + "-th largest = " + a[k]);
    System.out.println("Largest " + k + " elements:");
    IntUtils.printArray(a, k, a.length - 1);
  }
Exemple #4
0
  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);
  }
Exemple #5
0
 public static void test_partition() {
   final int a[] = IntUtils.genRandIntArray(10, 99, 10);
   IntUtils.printArray(a);
   partition(a, 0, a.length - 1);
   IntUtils.printArray(a);
 }