java 这个快速排序的代码中发生了什么?

lfapxunr  于 2024-01-05  发布在  Java
关注(0)|答案(1)|浏览(161)

我发现了这个快速排序的代码实现,我想问:代码中粗体部分是做什么的?是检查数组的左右部分是否有未排序的元素吗?

  1. import java.util.Scanner;
  2. public class QuickSort {
  3. static int a[];
  4. public static void main(String[] args) {
  5. Scanner sc = new Scanner(System.in);
  6. System.out.print("n = ");
  7. int n = sc.nextInt();
  8. System.out.println("Array: ");
  9. a = new int[n];
  10. for (int i = 0; i < n; i++) {
  11. a[i] = sc.nextInt();
  12. }
  13. quickSort(0, n - 1);
  14. System.out.println("Sorted array: ");
  15. for (int i = 0; i < n; i++) {
  16. System.out.print(a[i] + " ");
  17. }
  18. sc.close();
  19. }
  20. private static void quickSort(int left, int right) {
  21. int i = left, j = right;
  22. int pivot = a[(left + right) / 2];
  23. while (i <= j) {
  24. while (a[i] < pivot) {
  25. i++;
  26. }
  27. while (a[j] > pivot) {
  28. j--;
  29. }
  30. if (i <= j) {
  31. swap(a, i, j);
  32. i++;
  33. j--;
  34. }
  35. }
  36. if (left < j) {
  37. quickSort(left, j);
  38. }
  39. if (i < right) {
  40. quickSort(i, right);
  41. }
  42. }
  43. private static void swap(int a[], int index1, int index2) {
  44. int aux = a[index1];
  45. a[index1] = a[index2];
  46. a[index2] = aux;
  47. }
  48. }

字符串
我试着理解代码在做什么。

m1m5dgzv

m1m5dgzv1#

是否检查数组的左右部分中是否有未排序的元素?

是的就是这样

它负责在数组的左右分区上递归调用quickSort函数。
在将数组初始划分为两个子数组(左和右)之后,对每个子数组调用quickSort函数以进一步排序它们。此过程递归地继续,直到子数组变为单个元素或空,此时排序完成。
因此,粗体代码块本质上是检查左右子数组中是否还有未排序的元素,并递归地应用quickSort函数对这些子数组进行排序。这个递归过程最终是按照升序对整个数组进行排序。

相关问题