黑马程序员技术交流社区

标题: 关于快速排序递归 [打印本页]

作者: M路    时间: 2014-6-22 05:07
标题: 关于快速排序递归
网上找了一个前辈实现快速排序的代码,对递归不是太懂,有没有好心人可以帮忙讲解一下。连接在这: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行什么时候执行?
谢谢各位了!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2