package sorting;
import methods.*;
import java.util.Random;
public class QuickSort {
public void quickSort(int[] nums) {
quickSort(nums, 0, nums.length-1, new Random());
}
// partition an array with specified range [left, right]
private void quickSort(int[] nums, int left, int right, Random rm) {
int L = right-left;
if(L<=0) return; // one item in range, thus no need to sort
int pivot = rm.nextInt(L) + left; // randomly choose pivot
swap(nums, left, pivot); // swap pivot with leftmost item
pivot = left; // update pivot index to leftmost index
int lo = left+1, hi = right;
while(lo<=hi) {
if(nums[lo]==nums[pivot]) ++lo; // move right if low item equals pivot item
else if(nums[lo]