快排基本思想:
初始化标记low为划分第一个元素的位置(下标),high为最后一个元素的位置(下标),然后不断地移动两边的元素进行赋值。
(1)high向前移动,找到第一个比pivot小的元素
(2)low向后移动找到第一个比pivot大的元素
(3)进行赋值操作
(4)继续移动标记 执行上面3个步骤 直到low>=high
上代码:
建议手动敲一下 手动比划一下 理解过程
package Data.Structure.sort.exchangeSort;
import java.util.Arrays;
public class QuickSort1 {
public static void main(String[] args) {
int A[] = {-9, 78, 0, 23, -567, 70};
quickSort(A, 0, 5);
System.out.println(Arrays.toString(A));
}
public static void quickSort(int A[], int low, int high) {
int temp, i, j;//low high都是下标
if (low >= high) //如果low>=high就不用排序了
return;
//否则的话 将第一个数字作为基准pivot
i = low;
j = high;
temp = A[i];
while (i < j) {
while (i < j && A[j] >= temp) {
--j;
}
if (i < j) {//满足i<j的情况下 肯定是不满足A[j] >= temp 儿跳出的while循环
A[i] = A[j];
++i;
}
while (i < j && A[i] <= temp) {
++i;
}
if (i < j) {
A[j] = A[i];
--j;
}
A[i] = temp;//找到枢纽位置
quickSort(A, low, i - 1);//j-1 或者i-1 都行 因为是相等的
quickSort(A, i + 1, high);//对右区间进行递归
}
}
}