public static void quick(int[] arr, int begin, int end) {//结束所以不包含
if (end - begin <= 1) {
return;
}
//分区,分三个部分,中间是键,左边是比键小,右面比键大
//定位键索引最关键
int key = arr[begin];//总是取第一个元素为键值
int keyIndex = begin;//键索引值,用于动态保存比键值小的值
for (int i = begin + 1; i < end; i++) {
if (arr[i] < key) {
keyIndex++;//只要找到了比key小的数据,keyIndex右移
//交换keyIndex和i位置的值
int tmp = arr[keyIndex];
arr[keyIndex] = arr[i];//保证比键小的值在键的右面依次保存
arr[i] = tmp;
}
}
//让键值归为到keyIndex处
arr[begin] = arr[keyIndex];
arr[keyIndex] = key;//归位
//左子列递归
quick(arr, begin, keyIndex);
//右子列递归
quick(arr, keyIndex + 1, end);
}