递归实现快速排序

 

 1 public static void main(String[] args) throws Exception{
 2         int a[] = {12, 13, 10, 8, 9, 21, 38, 2, 5};
 3         quickSort(a, 0, a.length-1);
 4         for (int i = 0; i < a.length; i++) {
 5             System.out.print(a[i] + " ");
 6         }
 7     }
 8     
 9     public static void quickSort(int a[], int left, int right) {
10         if (left > right) {
11             return;
12         }
13         int i = left;
14         int j = right;
15         int temp = a[left];
16         
17         while (i != j) {
18             while (a[j] >= temp && i < j) {
19                 j--;
20             }
21             while (a[i] <= temp && i < j) {
22                 i++;
23             }
24             
25             if (i < j) {
26                 a[i] = a[i] ^ a[j];
27                 a[j] = a[i] ^ a[j];
28                 a[i] = a[i] ^ a[j];
29             }
30         }
31         a[left] = a[i];
32         a[i] = temp;
33         
34         quickSort(a, left, i-1);
35         quickSort(a, i+1,right);
36     }

注:当a[j]大于或者等于temp时都符合条件,同理当a[i]小于或者等于temp时也符合条件,如果i只是小于,那么当i指向left位置时无法向右移动,会一直停在left的位置不动

posted on 2014-07-16 10:23  pokemonzj  阅读(162)  评论(0)    收藏  举报

导航