快速排序:升序+降序----java实现

快速排序思路:先把第一个元素令为low下标,最后一个为high下标。并把第一个元素令为temp来作为标准元素。以标准元素来调整数组,使比标准元素小的都在标准元素前,比标准元素大的都在标准元素后。这样一次排序后,有两个好处:1.标准元素找到了它自己在该元素中的位置;2.把数组分成了以标准元素为分隔的两个子数组。然后分别对两个子数组采用相同的排序方法。那么明显就递归咯~~~

一:升序快排

package com.sheepmu.text;

import java.util.Arrays;
 
  /*   
  * @author sheepmu
  */ 
public class Sort {
	 public static void main(String[] args){
		 int[] arr={60,55,48,37,10,90,84,36};
		 int len=arr.length;
		 
		 quickSort(arr,0,len-1);
		 System.out.println("升序快排后----->"+Arrays.toString(arr));
	 }	 	 
	 public static  void quickSort(int[] arr,int low,int high){
		 
		 int i,j,temp;
		 i=low;//低端下标
		 j=high;//高端下标
		 temp=arr[i];//取第一个元素为标准元素。
		 
		 while(i<j){//递归出口是 low>=high
			 
			 while(i<j&&temp<=arr[j]) //在数组的后端扫描
				 j--;//移动后j再减了一个,即在temp前一个咯
			 if(i<j){
				 arr[i]=arr[j];
				 i++;
			 }
			 
			 while(i<j&&arr[i]<temp) //在数组的左端扫描
				 i++;
			 if(i<j){
				 arr[j]=arr[i];
				 j--;
			 }
			 
		 }//while完,即第一盘排序
		 arr[i]=temp;//把temp值放到它该在的位置。
//		 System.out.println("第    次排序----->"+Arrays.toString(arr));
		 if(low<i)
			 quickSort(arr,low,i-1);//对左端子数组递归
		 if(i<high)
			 quickSort(arr,j+1,high);//对右端子数组递归
		 
		 
	 }
}	 
 

二:降序快排

import java.util.Arrays;    
  /*    
  * @author sheepmu 
  */   
public class Sort {  
     public static void main(String[] args){  
         int[] arr={60,55,48,37,10,90,84,36};  
         int len=arr.length;     
         quickSort(arr,0,len-1);  
         System.out.println("降序快排后----->"+Arrays.toString(arr));  
     }         
     public static  void quickSort(int[] arr,int high,int low){   
         int i,j,temp;  
         i=high;//高端下标  
         j=low;//低端下标  
         temp=arr[i];//取第一个元素为标准元素。  
           
         while(i<j){//递归出口是 low>=high  
               while(i<j&&temp>arr[j])//后端比temp小,符合降序,不管它,low下标前移
            	   j--;//while完后指比temp大的那个
               if(i<j){
            	   arr[i]=arr[j];
            	   i++;
               }
               while(i<j&&temp<arr[i])
            	   i++;
               if(i<j){
            	   arr[j]=arr[i];
            	   j--;
               }
         }//while完,即第一盘排序  
         arr[i]=temp;//把temp值放到它该在的位置。  
      
         if(high<i) //注意,下标值	 
        	 quickSort(arr,high,i-1);//对左端子数组递归  
         if(i<low)  //注意,下标值
             quickSort(arr,i+1,low);//对右端子数组递归  ;对比上面例子,其实此时i和j是同一下标!!!!!!!!!!!!!
  
     }  
}      
 


posted @ 2014-04-03 23:23  IT专业户  阅读(3073)  评论(0编辑  收藏  举报