GIF demonstration
Source code demonstration
import java.util.Arrays;
public class code02_QuickSort {
public static void main(String[] args) {
int[] array = generateRandomArray(100, 100);
int[] test = copyArray(array);
Arrays.sort(test);
quickSort(array, 0, array.length - 1);
compareArray(array, test);
}
public static void quickSort(int[] array, int L, int R) {
if (L < R) {
swap(array, L + (int) (Math.random() * (R - L + 1)), R);
int[] p = partition(array, L, R);
quickSort(array, L, p[0] - 1);
quickSort(array, p[1] + 1, R);
}
}
public static int[] partition(int[] array, int L, int R) {
int less = L - 1;
int more = R;
while (L < more) {
if (array[L] < array[R]) {
swap(array, ++less, L++);
} else if (array[L] > array[R]) {
swap(array, --more, L);
} else {
L++;
}
}
swap(array, more, R);
return new int[]{less + 1, more};
}
public static void swap(int[] array, int i, int j) {
if (i == j) {
return;
}
array[i] = array[i] ^ array[j];
array[j] = array[i] ^ array[j];
array[i] = array[i] ^ array[j];
}
public static int[] generateRandomArray(int maxSize, int maxValue) {
int[] array = new int[(int) ((maxSize + 1) * Math.random())];
for (int i = 0; i < array.length; i++) {
array[i] = (int) (maxValue * Math.random());
}
return array;
}
public static void compareArray(int[] array1, int[] array2) {
if (!Arrays.equals(array1, array2)) {
System.out.println("No equals!!");
} else {
System.out.println("Success!!");
}
}
public static int[] copyArray(int[] array) {
int[] tmp = new int[array.length];
System.arraycopy(array, 0, tmp, 0, array.length);
return tmp;
}
}