快速排序

mac2024-05-24  35

import java.util.Arrays; class Main { public static void main(String[] args) { int[] arr = {6, 1, 2, 7, 9, 3, 4, 5, 10, 8}; quickSort(arr, 0, arr.length - 1); System.out.println(Arrays.toString(arr)); } /** * @param arr * @param left 左边界 * @param right 右边界 */ private static void quickSort(int[] arr, int left, int right) { //排序结束 if (left >= right) return ; //获取中间位置的索引 int pivotIndex = partition(arr, left, right); //左边递归 quickSort(arr, left, pivotIndex - 1); //右边递归 quickSort(arr, pivotIndex + 1, right); } //寻找中轴位置 private static int partition(int[] arr, int left, int right) { //以第一个元素为中轴 int pivot = arr[left]; while (left < right) { //如果arr[right]大于中轴的值,right向左移动,当arr[right]小于中轴值得时候 while (left < right && arr[right] >= pivot) right--; //将这个较小的值赋给头元素,即完成了小于中轴的放在中轴的左边, //且left右移一位,减少下面的一次比较次数 if (left < right) arr[left++] = arr[right]; //如果arr[left]小于中轴的值,left向右移动,当arr[left]大于中轴值得时候 while (left < right && arr[left] <= pivot) left++; //将这个较大的值赋给arr[right],即完成了大于中轴的放在中轴的右边 if (left < right) arr[right--] = arr[left]; } //left最终时中轴位置,将中轴值赋给中轴的位置 arr[left] = pivot; return left; } }
最新回复(0)