import java.util.Arrays; public class QuickSorted { /** * 快速排序方法1 * * @param arr * @param low * @param high */ public void quickSort1(int arr[], int low, int high) { int start = low; int end = high; int key = arr[low]; //退出机制, end=start,key被换到中间 while (end > start) { while (end > start && arr[end] >= key) { end--; if (arr[end] <= key) { swap(arr, start, end); break; } } while (end > start && arr[start] <= key) { start++; if (arr[start] >= key) { swap(arr, start, end); break; } } } // 此时第一次循环比较结束,关键值的位置已经确定了。 // 左边的值都比关键值小,右边的值都比关键值大,但是两边的顺序还有可能是不一样的,进行下面的递归调用 if (start > low) quickSort1(arr, low, start);// 左边序列。第一个索引位置到关键值索引 if (end < high) quickSort1(arr, end + 1, high);// 右边序列。从关键值索引+1到最后一个 } /** * 交换数组内两个元素 */ public void swap(int[] array, int i, int j) { int temp = array[i]; array[i] = array[j]; array[j] = temp; } // 测试 public static void main(String[] args) { QuickSorted s = new QuickSorted(); int[] arr = {11, 3, 29, 49, 30, 7, 50, 63, 46, 1, 99}; System.out.println("未排序的数组:" + Arrays.toString(arr)); s.quickSort1(arr, 0, arr.length - 1); System.out.println("排序后的数组:" + Arrays.toString(arr)); } }
参考资料:
https://blog.csdn.net/qq_34801169/article/details/81412252 (链接内代码有bug,本文做了修改)