private static int partition(int[] arr, int startIndex, int endIndex) { // 取第1个位置(也可以选择随机位置)的元素作为基准元素 int pivot = arr[startIndex]; int mark = startIndex; for(int i=startIndex+1; i<=endIndex; i++){ if(arr[i]<pivot){ mark ++; int p = arr[mark]; arr[mark] = arr[i]; arr[i] = p; } } arr[startIndex] = arr[mark]; arr[mark] = pivot; return mark; } pivot是快排的准基元素,通常是数组首元素,循环到的元素与之比较若小于,则mark+1,而mark 指针指向数列起始位置,mark 指针代表小于基准元素的区域边界将循环到小于pivot的元素与array[mark]交换一次循环结束后,要将最后一个小于pivot的元素与数组首元素交换最后返回mark指针 public static void quickSort(int[] arr, int startIndex, int endIndex) { // 递归结束条件:startIndex大于或等于endIndex时 if (startIndex >= endIndex) { return; } // 得到基准元素位置 int pivotIndex = partition(arr, startIndex, endIndex); // 根据基准元素,分成两部分进行递归排序 quickSort(arr, startIndex, pivotIndex - 1); quickSort(arr, pivotIndex + 1, endIndex); }