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

场景:代码实现堆排序,选择使用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;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值