import java.util.Arrays; //手写快速排序 public class QuickSort { public static void main(String[] args) { int[] arr = {2, 4, 8, 3, 5, 9, 1}; System.out.println(Arrays.toString(arr)); quickSort(arr, 0, arr.length - 1); System.out.println(Arrays.toString(arr)); } /** * @param arr 传入的数组 * @param left 数组的最左下标 * @param right 数组的最右下标 */ public static void quickSort(int[] arr, int left, int right) { /**选择中间位置为基准*/ int l = left; int r = right; int standard = arr[(l + r) / 2]; //遍历整个数组 while (l < r) { /**从左往右遍历,直到找到比中间值大的*/ while (arr[l] < standard) { l += 1; } /**从右往左遍历,直到找到比中间值小的*/ while (arr[r] > standard) { r -= 1; } /**判断是否越过中间值 * 越界说明中间值左边的都是*/ if (l >= r) { break; } /**交换数据*/ int temp = arr[l]; arr[l] = arr[r]; arr[r] = temp; } /**说明下标为l/r的数值已是整个数组的中间值了,无需再动位置*/ if (l == r) { l += 1; r -= 1; } /**向左递归*/ if (left < r) { quickSort(arr, left, r); } /**向右递归*/ if (right > l) { quickSort(arr, l, right); } } }