网上找了一个前辈实现快速排序的代码,对递归不是太懂,有没有好心人可以帮忙讲解一下。连接在这:http://blog.csdn.net/zhb123168/article/details/8083653。代码如下
10.public class Test4 {
11.
12. static int count = 0;
13.
14. public static void main(String[] args) {
15. int values[] = { 5, 4, 8, 3, 7, 2, 1, 9, 0, 6 };
16.
17. qsort(values, 0, (values.length - 1));
18.
19. System.out.printf("\n\n排序后的结果是:");
20. for (int i = 0; i < values.length; i++) {
21. System.out.printf("%d ", values[i]);
22. }
23. }
24.
25. public static void qsort(int values[], int left, int right) {
26. int tmp = 0;
27.
28. System.out.printf("\n这个是第%d次排序的结果:", count);
29. count++;
30. for (int i = 0; i < values.length; i++) {
31. System.out.printf("%d ", values[i]);
32. }
33.
34. if (left < right) {
35. tmp = partition(values, left, right);
36. qsort(values, left, tmp);
37. qsort(values, tmp + 1, right);
38. }
39. }
40.
41. public static int partition(int values[], int left, int right) {
42. int i = 0, j = 0;
43. int key = 0, tmp = 0;
44.
45. if (null == values) {
46. return 0;
47. }
48.
49. i = left;
50. j = right;
51. key = values[left];
52.
53. // 这个while循环可以实现排序的第一步:分组
54. while (i < j) {
55. while (values[j] > key) {
56. --j;
57. }
58. tmp = values[i];
59. values[i] = values[j];
60. values[j] = tmp;
61.
62. while (values[i] < key) {
63. i++;
64. }
65. tmp = values[i];
66. values[i] = values[j];
67. values[j] = tmp;
68. }
69.
70. return i;
71.
72. }
73.}
34到37行的代码不是太明白,当35行算完temp之后,temp的值赋给36行,然后36重新调用qsort吗?37行什么时候执行?
谢谢各位了! |
|