/** * 快速排序算法 * @param arr 待排序数组 * @param startIndex 起始下标 * @param endIndex 结束下标 * @return 排序好的数组 */ public static int[] quickSort(int[] arr, int start, int end) { int left = start; int right = end; int compIndex = start; int temp = 0; // 一趟快速排序 while (start < end) { // 从后往前找到第一个比基准值小的元素 while (start < end) { if (arr[end] < arr[compIndex]) { temp = arr[end]; arr[end] = arr[compIndex]; arr[compIndex] = temp; compIndex = end; break; } end--; } // 从前往后找到第一个比基准值大的元素 while (start < end) { if (arr[compIndex] < arr[start]) { temp = arr[start]; arr[start] = arr[compIndex]; arr[compIndex] = temp; compIndex = start; break; } start++; } } // 如果排序起始值和基准值之间还有一个元素,对基准值左边的元素集合继续进行快速排序 if (left + 1 < compIndex) { arr = quickSort(arr, left, compIndex - 1); } // 如果基准值和排序结束值之间还有一个元素,对基准值右边的元素集合继续进行快速排序 if (compIndex < right - 1) { arr = quickSort(arr, compIndex + 1, right); } return arr; }