package basic_class_01;
/**
* @Author qgfzzzzzz
* @Date 19-3-1
* @Version 1.0
*
* The time : o(n * n) and the space is : o(n) in the worst case;
* The random quick sort' time : 0(n * logn) and the space is o(logn)
*
*/
public class Code_04_QuickSort {
public static void quickSort(int[] arr){
if(arr == null || arr.length < 2){
return;
}
quickSort(arr, 0, arr.length - 1);
}
public static void quickSort(int[] arr, int l, int r){
if(l < r){
// This row code is random quick sort
swap(arr, l + (int)(Math.random() * (r - l + 1)), r);
int[] p = partition(arr, l, r);
quickSort(arr, l, p[0] - 1);
quickSort(arr, p[1] + 1, r);
}
}
public static int[] partition(int[] arr, int l, int r){
int less = l - 1;
int more = r;
while(l < more){
if(arr[l] < arr[r]){
swap(arr, ++less, l++);
}
else if(arr[l] > arr[r]){
swap(arr, --more, l);
}
else{
l++;
}
}
swap(arr, more, r);
return new int[]{less + 1, more};
}
public static void swap(int[] arr, int i, int j){
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
public static void main(String[] args){
int[] arr = {5, 3, 9, 7, 1, 6, 4};
quickSort(arr);
for (int t :
arr) {
System.out.print(t + " ");
}
}
}