您的位置:首页 > 其它

【排序算法】——归并排序

2015-09-27 16:38 351 查看
场景:代码实现堆排序,选择使用Java代码

思路:把待排数组平均分成两组,递归分组,直到每一组剩下一个元素后,两两数组进行有序合并。

代码实现

package Sort;
/**
 * @author yummy
 */
public class MergeSort { 
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MergeSort test = new MergeSort();
		
		int []a = {1,7,2,8,3,6,5,4,7,0,12,4};
		System.out.print("排序前:");
		for(int i = 0; i < a.length; i++)
			System.out.print(a[i]+" ");
		System.out.println(" ");	
		mergeSort(a,0,a.length-1);
		System.out.print("排序后:");
		for(int i = 0; i < a.length; i++)
			System.out.print(a[i]+" ");
		System.out.println(" ");
	}
	
	/**
	 * 
	 * @param array 待排数组
	 * @param start
	 * @param end
	 */
	public static void mergeSort(int[] array,int start,int end){		
		if(start >= end)
			return;	
		int mid = (start+end)/2;
		mergeSort(array,start,mid);
		mergeSort(array,mid+1,end);
		merge(array,start,mid,end);
	}
		
	/**
	 * 合并操作
	 * @param array
	 * @param left
	 * @param center
	 * @param right
	 */
	public static void merge(int[] array,int start,int center,int end){
		//临时数组
		int[] temp = new int[end-start+1];
		//第二个数组头元素引索
		int secondArr = center+1;
		//临时数组头元素引索
		int tempArr = 0;
		//记录下start位置
		int flag = start;
		while(start <= center && secondArr <= end)
		{
			if(array[start] <= array[secondArr])
				temp[tempArr++] = array[start++];
			else
				temp[tempArr++] = array[secondArr++];
		}

		while(start <= center)
		{
			temp[tempArr++] = array[start++];
		}
		
		while(secondArr <= end)
		{
			temp[tempArr++] = array[secondArr++];
		}
		tempArr = 0;
		while(flag <= end)
		{
			array[flag++] = temp[tempArr++];
		}
		temp = null;
	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: