Quick Sort

Approach #1 Iterative - Select the middle index as Pivot

class Solution {
  public void quickSort(int[] arr, int low, int high) {
    if (arr == null || arr.length == 0) return;
    if (low >= high) return;

    int middle = low + (high - low) / 2;
    int pivot = arr[middle];

    int i = low, j = high;
    while (i <= j) {
      while (arr[i] < pivot) {
        i++;
      }
      while (arr[j] > pivot) {
        j--;
      }

      if (i <= j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
        i++;
        j--;
      }
    }

    if (low < j) {
      quickSort(arr, low, j);
    }    
    if (high > i) {
      quickSort(arr, i, high);
    }

  }
}

Approach #2 Select the last value of the array as Pivot

class Solution {
  public void quickSort(int[] arr, int start, int end) {
    int partition = partition(arr, start, end);

    if (start < partition - 1) {
        quickSort(arr, start, partition - 1);
    }

    if (partition + 1 < end) {
        quickSort(arr, partition + 1, end);
    }
  }

  public int partition(int[] arr, int start, int end) {
    int pivot = arr[end];
    for (int i = start; i < end; i++) {
      if (arr[i] < pivot) {
        swap(arr, start, i);
        start++;
      }
    }

        swap(arr, start, end);

    return start;
  }

  private void swap(int[] arr, i, j) {
    int temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
  }
}

Last updated