1. public static void main(String[] args) {
    2. Scanner sc = new Scanner(System.in);
    3. while (sc.hasNext()) {
    4. // 接受数组长度
    5. int n = sc.nextInt();
    6. // 创建数组
    7. int[] arr = new int[n];
    8. // 接受数组元素
    9. for (int i = 0; i < n; i++) {
    10. arr[i] = sc.nextInt();
    11. }
    12. int[] sortedArray = quickSort(arr, 0, n - 1);
    13. for (int i = 0; i < n; i++) {
    14. System.out.print(sortedArray[i] + " ");
    15. }
    16. }
    17. }
    18. /**
    19. * @description 快速排序
    20. * @param arr
    21. * @param left(从0开始)
    22. * @param right(到数组长度-1结束)
    23. * @return int[]
    24. */
    25. public static int[] quickSort(int[] arr, int left, int right) {
    26. if (left < right) {
    27. // 分区
    28. int partitionIndex = partition(arr, left, right);
    29. // 左分区排序
    30. quickSort(arr, left, partitionIndex - 1);
    31. // 右分区排序
    32. quickSort(arr, partitionIndex + 1, right);
    33. }
    34. return arr;
    35. }
    36. /**
    37. * @description 快速排序的分区操作
    38. * @param arr
    39. * @param left(从0开始)
    40. * @param right(到数组长度-1结束)
    41. * @return int
    42. */
    43. private static int partition(int[] arr, int left, int right) {
    44. // 设定基准值(pivot)
    45. int pivot = left;
    46. int index = pivot + 1;
    47. for (int i = index; i <= right; i++) {
    48. if (arr[i] < arr[pivot]) {
    49. swap(arr, i, index);
    50. index++;
    51. }
    52. }
    53. swap(arr, pivot, index - 1);
    54. return index - 1;
    55. }
    56. // 根据index交换数组中的两个元素
    57. private static void swap(int[] arr, int i, int j) {
    58. int temp = arr[i];
    59. arr[i] = arr[j];
    60. arr[j] = temp;
    61. }