java中的归并排序

java中的归并排序简单的说就是由小到大的排序(大问题小规模化),然后处理。

举例说明:

12   ,1   ,4   ,0   ,45   ,21   ,6

我们对于这个数组表排序,首先我们两个为一组,然后组内有序


我们一般在代码实现时会有定义start1 和end1 ,start2和end2来标识,我们来进行

第一次归并:

一小块排序:

然后将s1,e1,s2,e2向下一块赋予,让s1=e2+1,e1 =s1+ 块长+1,s2=e1+1,e2 

s2+块长+1;然后完成总排序。


第二次排序:

排序前:


排序后:


第三次排序:

排序前:


排序后:


至此,归并排序就全部结束了。

代码实现:

public static void merge(int array[],int gap){
		int start1 = 0;
		int end1 = start1+gap-1;
		int start2 = end1+1;
		int end2 = start2+gap-1 < array.length-1?start2+gap-1:array.length-1;
		//排序
		int []tmpArr = new int [array.length];
		int i = 0;
		
		while(start2 < array.length){
			//比较元素 s1 s2  s1++ s2++
			while(start1<=end1 && start2<=end2){
				if(array[start1] < array[start2]){
				tmpArr[i++] = array[start1];
				start1++;
				}else{
					tmpArr[i++] = array[start2];
					start2++;
				}
			}
			while(start1 <= end1){
				tmpArr[i++] =array[start1++];
			}
			while(start2<=end2){
				tmpArr[i++] =array[start2++];
			}
			start1 = end2+1;
			end1 = start1+gap-1;
			start2 = end1+1;
			end2 = start2 + gap-1<array.length-1?start2+gap-1:array.length-1;
		}
		while(start1 <array.length){
			tmpArr[i++] =array[start1++];
		}
		
		for(int j = 0;j< tmpArr.length;j++){
			array[j] = tmpArr[j];
		}
	}
	public static void mergeSort(int array[]){
		for(int i = 1;i<array.length;i=i*2){
			merge(array,i);
		}
	}

新手入门,如有错误,请多多指教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值