对一个数组进行快速排序,此时代码性能还未优化,也就是最容易理解的样子。
import java.util.Arrays;
public class QuickSort {
public static void main(String[] args) {
int[] A = { -9, 78, 0, 23, -567, 70, -1, 900, 4561 };
quickSort(A, 0, A.length - 1);
System.out.println(Arrays.toString(A));
}
public static void quickSort(int[] A, int low, int high) {
if (low < high) {
int pivotpos = Partition(A, low, high);// 划分标记中轴
quickSort(A, low, pivotpos - 1);
quickSort(A, pivotpos + 1, high);
}
}
//一趟,初始化第一个元素和最后一个元素,然后不断移动两个标记并交换元素
public static int Partition(int A[], int low, int high) {
//本来可以任意取一个作为基准,这里我采用了第一个
int pivot = A[low];
// 一旦重合即结束
while (low < high) {
// 找到第一个小于pivot的元素,向前移动
while (low < high && A[high] >= pivot)
--high;
A[low] = A[high];
// 找到第一个大于pivot的元素,向后移动
while (low < high && A[low] <= pivot)
++low;
A[high] = A[low];
}
A[low] = pivot;
return low;
}
}