Javaの4つの配列のソート

3004 ワード

package algorithm.sort;

import java.util.Random;

/**
 * @author  szy 
 * 2012-7-24
 */
public class Sort {
	/**
	 *      
	 * 
	 *     :            , 
	 *               ,       , 
	 *              ,             
	 * 
	 * @param arr
	 * @return 
	 */
	public int[] choiceSort(int[] arr){
		int t,i=0,j;
		int len = arr.length;
		for(;i<len;i++){
			int m = i;
			for(j=i+1;j<len;j++){
				//  j   m   , j   m
				if(arr[j] < arr[m]){
					m=j;
				}
			}
			//  m i       
			if(i != m){
				t = arr[i];
				arr[i] = arr[m];
				arr[m]=t;
			}
		}
		return arr;
	}
	
	/**
	 *     
	 * 
	 *     :             
	 *                  ,         
	 *         ,            
	 *           ,
	 *                 
	 *             
	 * @param arr
	 * @return 
	 */
	public int[] bubblingSort(int[] arr){
		int t,i=0,j=0;
		int len = arr.length;
		for(;i<len;i++){
			//            
			for(;j<len-i-1;j++){
				//        ,    ,    
				if(arr[j]>arr[j+1]){
					t=arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=t;
				}
			}
		}
		return arr;
	}
	
	/**
	 *     
	 * 
	 *     :            
	 *                       
	 *                .
	 *         ,            ,             
	 * 
	 * @param arr
	 * @return 
	 */
	public int[] insertSort(int[] arr){
		//           ,           
		//                   
		int i=1,j;
		int len = arr.length;
		for(;i<len;i++){
			int tmp = arr[i];
			j = i-1;
			//   i      ,       
			while(tmp < arr[j]){
				arr[j+1] = arr[j];
				j--;
				if(j == -1){
					break;
				}
			}
			//            
			arr[j+1] = tmp;
		}
		return arr;
	}
	
	/**
	 *     
	 * 
	 *     :            ,   2        
	 *                     2   .
	 *            ,          2
	 * 
	 * @param arr
	 * @param right arr.length-1
	 * @param left  0  
	 * @return 
	 */
	public int[] quickSort(int[] arr, int left, int right){
		int t,len = arr.length;
		
		if(left < right){
			int s = arr[left];
			int i = left;
			int j = right + 1;
			while(true){
				//     s      
				while(i+1 < len && arr[++i] < s );
				//     s     
				while(j-1 > -1 && arr[--j] > s);
				//   i>=j     
				if(i>=j)
					break;
				else{
					//  i j  
					t = arr[i];
					arr[i] = arr[j];
					arr[j] = t;
				}
			}
			arr[left] = arr[j];
			arr[j] = s;
			//       
			quickSort(arr,left,j-1);
			//       
			quickSort(arr,j+1,right);
		}
		return arr;
	}
	
	// Test
	public static void main(String[] args) {
		int i = 0, len = 100000;
		int[] arr = new int[len];
		Random rd = new Random();
		for (; i < len; i++) {
			arr[i] = rd.nextInt(len);
		}

		long millis = System.currentTimeMillis();
		 //new Sort().bubblingSort(arr); //26 
		 //new Sort().choiceSort(arr); //287 
		 new Sort().insertSort(arr);   //172 
		//new Sort().quickSort(arr, 0, len - 1);//19 
		for (i = 0; i < len; i++) {
			System.out.println(arr[i]);
		}

		System.out.println("  :" + (System.currentTimeMillis() - millis) / 100
				+ " ");
	}
}