采用左右指针交替遍历的方式进行排序:
1、取第一个数为比较基准
2、定义左右指针为基准数据加一和结尾
3、先移动左指针,如果数据大于基准,交换两者的位置。如果小于等于基准,则继续移动
4、如果左指针交换位置,则开始移动右指针,如果小于基准,交换两者位置,如果大于基准,则继续移动(然后交替移动左右指针)
5、如果指针重合,将基准数据放到该位置上。当前循环结束
6、这里得到基准左侧全部小于基准数据,右侧全部大于基准数据
7、将左右两侧分别重复递归上述操作,直到单侧只剩余一个数据时退出递归
public static void kuaipai(int[] arr, int l, int r) {
if (l >= r) {
return;
}
int left = l, right = r;
int mid = arr[right];
while (l < r) {
// 左指针向右移动
while (arr[l] <= mid && l < r) {
l++;
}
if (arr[l] > mid && l < r) {
arr[r] = arr[l];
}
// 右指针向左移动
while (arr[r] > mid && l < r) {
r--;
}
if (arr[r] <= mid) {
arr[l] = arr[r];
}
if ( l >= r) {
arr[l] = mid;
}
}
kuaipai(arr, left, r - 1);
kuaipai(arr, r + 1, right);
}