java 的各种排序算法

package dasf;

public class Sort {

	/** 创建一新数组 */
	private static int[] numArray = { 5, 12, 2, 63, 22, 6, 54, 42 };

	/** 计算新数组的长度 */
	private static int count = numArray.length;

	/**
	 * 构造方法
	 */
	protected Sort() {

	}

	/**
	 * 程序的唯一入口 main 方法
	 * 
	 * @param args
	 */
	public static void main1(String[] args) {
		BubbleSort(numArray);
		
		/** 输出 */
		for (int i = 0; i < count; i++) {

			System.out.print(numArray[i] + "\t");
		}
		

	}
	/**
	 * 选择
	 */
	public static void SelectSort(int[] array) {
       for (int i = 0; i < array.length; i++) {
    	   // 最大值得位置 
    	   int max = i;
    	   for (int j = i+1; j < array.length; j++) {
    		   if(array[max] < array[j]){
    			   max = j;
    		   }
    	   }
    	   swap(array,i,max);
       }
    }

	/**
	 * 插入法排序
	 */
    public static void InsertSort(int[] array) {
        for (int i = 1; i < array.length; i++) {
            int tmp = array[i];
            int j = i;
            while (j > 0 && array[j - 1] < tmp) {
                array[j] = array[j - 1];
                --j;
            }
            array[j] = tmp;
        }
    }
    /**
     * 冒泡法排序
     */
    public static void BubbleSort(int[] array) {
		int temp;
		for (int i = 0; i < array.length - 1; i++) {
			for (int j = i + 1; j < array.length; j++) {
				if (array[i] < array[j]) {
					temp = array[i];
					array[i] = array[j];
					array[j] = temp;
				}
			}
		}
	}
   
	
	/**
     * 交换数组中i和j的位置
     */
    private static void swap(int[] array, int i, int j) {
        int tmp = array[i];
        array[i] = array[j];
        array[j] = tmp;
    }
    
    /**  
     * @param pData 需要排序的数组  
     * @param left  左边的位置,初始值为0  
     * @param right 右边的位置,初始值为数组长度  
     */   
    public static void QuickSort(int[] pData,int left,int right)   
    {   
      int i,j;   
      int first,temp;   
      i = left;   
      j = right;   
      first = pData[left]; //这里选其他的数也行,不过一般选第一个  
      //一趟快速排序   
      while(true)   
      {   
      //从第二个数开始找大于中枢的数 ,从前面开始找大于pData[left]的数  
          while((++i)<right-1 && pData[i]<first);   
          //从最后一个数开始找第一个小于中枢pData[left]的数   
          while((--j)>left && pData[j]>first);   
          if(i>=j)   
              break;   
          //交换两边找到的数   
          temp = pData[i];   
          pData[i] = pData[j];   
          pData[j] = temp;   
   
      }   
      //交换中枢   
      pData[left] = pData[j];   
      pData[j] = first;   
      //递归快排中枢左边的数据   
      if(left<j)   
        QuickSort(pData,left,j);   
      //递归快排中枢右边的数据   
      if(right>i)   
        QuickSort(pData,i,right);   
    }   
   
    public static void main(String[] args){   
     
       int [] pData = new int[5];   
       for(int i = 0; i< 5; i++)   
            pData[i] = (int)(Math.random()*100);//Produce 10 random integers   
         
        for(int i = 0; i<pData.length; i++){   
            System.out.print(pData[i]+" ");    
        }  
        QuickSort(pData, 0, pData.length);   
         
        System.out.println("\n***********************");   
         
        for(int i = 0; i<pData.length; i++){   
            System.out.print(pData[i]+" ");   
        }  

    }
}
 

你可能感兴趣的:(java,算法,J#)