快速排序和堆排序

 

 

 

 

 1 //快速排序    
 2 public static  <T extends Comparable> int partion(T a[],int low,int high)
 3     {
 4         T pivo=a[low];
 5         while(low<high)
 6         {
 7             while(low<high&&pivo.compareTo(a[high])<=0)
 8             {
 9                 high--;
10             }
11             a[low]=a[high];
12             while(low<high&&pivo.compareTo(a[low])>=0)
13             {
14                 low++;
15             }
16             a[high]=a[low];
17         }
18         a[low]=pivo;
19         return low;
20     }
21     public static <T extends Comparable> void QSort(T a[],int low,int high)
22     {
23         if(low<high)
24         {
25             int pivoLoc=partion(a, low, high);
26             QSort(a,low,pivoLoc-1);
27             QSort(a,pivoLoc+1,high);
28             
29         }
30     }

 

 

 1   //堆排序
 2   public static void ajustHeap(int a[],int s,int size)
 3   {
 4     int temp=a[s];
 5     for(int j=2*s+1;j<size;j=j*2+1){
 6       if(j+1<size&&a[j]<a[j+1])
 7       {
 8         j++;
 9       }
10       if(a[j]<=temp){
11         break;
12       }
13       a[s]=a[j];
14       s=j;
15     }
16     a[s]=temp;
17   }
18   public static void heapSort(int a[])
19   {
20     // build heap
21     for(int i=a.length/2-1;i>=0;i--) {
22       ajustHeap(a, i, a.length);
23     }
24     for(int i=a.length-1;i>0;i--)
25     {
26 
27       int temp=a[i];
28       a[i]=a[0];
29       a[0]=temp;
30         ajustHeap(a, 0,i);
31     }
32   }

 

 

 

 1 //测试
 2 public static void main(String[] args) {
 3         Integer arr[]={3,1,6,2,8,89,4,4,6,9};
 4         int a[]={3,1,6,2,8,89,4,4,6,9};
 5         System.out.println("qsort sort");
 6         QSort(arr,0,arr.length-1);
 7         for(Integer i:arr)
 8             System.out.print(i+" ");
 9         System.out.println("heap sort");
10         heapSort(a);
11         for(Integer i:a)
12             System.out.print(i+" ");
13     }

 

posted on 2014-09-04 17:16  wf110  阅读(346)  评论(0编辑  收藏  举报