package mytest; import java.util.Arrays; /** * @author :l_coil * @date :2021/12/11 9:41 下午 */ public class QuickSort { public static void main(String[] args) { int[] ints = {3, 1, 4, 8, 7, 5, 2}; int[] result = quickSort(ints,0,6); System.out.println(Arrays.toString(result)); } public static int[] quickSort(int[] arr, int l, int r) { // 确定一次运算的基准值 int base = arr[l]; int lindex = l, rindex = r; while (lindex < rindex) { // 从右至左找到第一个小于基准值的位置 while (arr[rindex] > base && lindex < rindex) { rindex--; } // 从左至右找到第一个大于基准值的位置 while (arr[lindex] < base && lindex < rindex) { lindex++; } // 处于中间位置,一轮运算暂未结束,进行交换 if (lindex < rindex && arr[lindex] != arr[rindex]) { int temp = arr[rindex]; arr[rindex] = arr[lindex]; arr[lindex] = temp; } //向右移动左值指针,或者向左移动右指针都阔以 if (lindex < rindex && arr[lindex] == arr[rindex]) { lindex++; } } // 分治前一轮的再排序 if (l < lindex - 1) { arr = quickSort(arr, l, lindex - 1); } if (rindex + 1 < r) { arr = quickSort(arr, rindex + 1, r); } return arr; } }