欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

快速排序Java版本

时间:2023-06-30

出处:算法第四版
 

public class QuickSort { public static void quickSort(int[] a) { helper(a, 0, a.length - 1); } private static void helper(int[] a, int lo, int hi) { if (hi <= lo) { return; } // 这一步中,选取切分元素,再根据切分元素调整整个数组 int j = partition(a, lo, hi); // 每次调整后打印下整个数组 for (int num : a) { System.out.print(num + " "); } // finish print System.out.println(); // 返回排序后的切分元素,再以切分元素分开左右两边分别排序 helper(a, lo, j - 1); helper(a, j + 1, hi); } private static int partition(int[] a, int lo, int hi) { int i = lo; int j = hi + 1; // 选择切分元素 int value = a[lo]; while (true) { // 从左到右找到第一个小于切分元素的元素index后停止 while (a[++i] < value) { if (i == hi) { break; } } // 从右到左找到第一个大于切分元素的元素index后停止 while (value < a[--j]) { if (j == lo) { break; } } // 被注释的写法冗余 // 从左到右找到第一个小于切分元素的元素index后停止// while (a[i] < value && i < a.length) {// i++;// if (i == hi) {// break;// }// }// // 从右到左找到第一个大于切分元素的元素index后停止// while (value < a[j] && j >= 0) {// j--;// if (j == lo) {// break;// }// } if (i >= j) { break; } exch(a, i, j); } // 将处于lo处的切分元素换到正确的位置j处 exch(a, lo, j); // 返回切分元素的正确位置 return j; } private static void exch(int[] a, int i, int j) { int temp = a[i]; a[i] = a[j]; a[j] = temp; } public static void main(String[] args) { int[] a = new int[]{5, 3, 7, 3, 4, 8, 9, 43, 32, 56, 0}; quickSort(a); }}

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。