- public static void quickSork(int[] arr, int left, int right) {
- //定义一个记录数组中间索引的变量
- int middle = (left+right)/2;
- //定义一个变量用来交换两个值
- int jh;
- //用于记录数组左边的索引
- int l = left;
- //用于记录数组右边的索引
- int r = right;
- do {
- //如果下标为l的值小于中间值并且没有超过最大索引值则自增
- while (arr[l]<arr[middle] && l<right) {
- l++;
- }
- //如果下标为r的值大于中间值并且没有低于最小索引值则自减
- while (arr[r]>arr[middle] && r>left ) {
- r--;
- }
- //如果r这个索引大于或等于l这个索引,说明r索引的值大于l索引
- //的值,所以要交换位置,保证排序正常。
- if (l <= r) {
- jh = arr[r];
- arr[r] = arr[l];
- arr[l] = jh;
- l ++;
- r --;
- }
- } while (l <= r);//如果r这个索引大于或等于l这个索引,说明本次排序结束
- //如果r的索引大于起始索引,说明还没有排序完,因为排序方式
- //相同则使用递归。
- if (left < r) {
- quickSork(arr, left, r);
- }
- //如果l的索引小于结束索引,说明还没有排序完,因为排序方式
- //相同则使用递归。
- if (right > l) {
- quickSork(arr, l, right);
- }
- }
复制代码 |