/**
	 * 归并两个有序表
	 * @param array
	 * @param start  开始位置
	 * @param mid    第一个序列结束位置
	 * @param end    第二个序列结束位置
	 * @return
	 */
    public static void merge(int[] array,int start,int mid,int end)
    {
    	int[] result = new int[end-start+1];
    	int aIndex = start;
    	int bIndex = mid+1;
    	int resultIndex = 0;
    	while(aIndex<=mid&&bIndex<=end)
    	{
    		if(array[aIndex]>array[bIndex])
    		{
    			result[resultIndex] = array[aIndex];
    			aIndex++;
    		}
    		else
    		{
    			result[resultIndex] = array[bIndex];
    			bIndex++;
    		}
    		resultIndex++;
    	}
    	while(aIndex<=mid)
    	{
    		result[resultIndex] = array[aIndex];
    		aIndex++;
    		resultIndex++;
    	}
    	while(bIndex<=end)
    	{
    		result[resultIndex] = array[bIndex];
    		bIndex++;
    		resultIndex++;
    	}
    	copyArray(result,array,start);
    }
    /**
     * 复制
     * @param sourceArray
     * @param targetArray
     * @param start  targetArray的开始位置
     */
    public static void copyArray(int[] sourceArray,int[] targetArray,int start)
    {
    	for(int i=0;i<sourceArray.length;i++)
    	{
    		targetArray[start+i] = sourceArray[i];
    	}
    }
    /**
     * 
     * @param array
     * @param start  开始位置
     * @param end    结束位置
     */
    public static  void sortArray(int[] array,int start,int end)
    {
    	if(end == start)
    	{
    		return ;
    	}
    	
    	int mid = (end-start)/2+start;
    	sortArray(array,start,mid);	
    	sortArray(array,mid+1,end);
    	merge(array,start,mid,end);
    }
    
    public static void main(String[] args)
    {
    	int[] testArray = {0,1,2,10,18,29,14,14,13,12,18,17};
    	sortArray(testArray,0,testArray.length-1);
    	for(int i:testArray)
    	{
    		System.out.print(i+",");
    	}
    }
原文:http://www.cnblogs.com/hzw-hym/p/4415547.html