归并排序----java实现

本文详细介绍了归并排序的原理及实现方法,包括递归分解数组直至每个子数组仅包含一个元素,随后逐步合并这些子数组形成有序数组的过程。文中还提供了具体的Java代码实现。

归并排序

归并排序是将两个有序的序列合并成一个新的有序序列。

归并排序:

(1)递归分解数组;

   将数组每次折半划分,直到把数组划分为n个长度为1的有序序列。

(2)合并排序数组;

先做两两合并,得到2/n 个有序序列,再两两合并,不断重复这个过程,直到得到一个长度为n的数组。

合并两个排序数组:

1)先依次比较两个数组中的元素,把较小的那个元素放在辅助数组的对应位置。

2)如果比较完成,两个数组中还有元素,就依次放在辅助数组的后面。

3)完成合并后,将辅助数组中的元素复制到原数组中。

 public void mergeSort(int array[])
   {
	   if(array.length == 0 || array == null)
	   {
		   return;
	   }
	   subMergeSort(array,0,array.length-1);
   }
   private void subMergeSort(int[]array,int left,int right)
   {
	   if(left < right)
	   {
		   //将数组折半划分
		   int mid = (left + right) / 2;//先拆分数组
		   subMergeSort(array,left,mid);//将拆分的子数组先排序
		   subMergeSort(array,mid+1,right);
		   merge(array,left,mid,right);//合并排序数组
	   }
	  
   }
   //合并两个已经排序的数组
   private void merge(int[]array,int left,int mid,int right)
   {
	   int[]temp = new int[array.length];//辅助数组
	   int low = left;
	   int high = mid + 1;
	   int tmp =left;//辅助数组的索引
	   //比较两个数组取较小的值放入辅助数组
	   while(low <= mid && high <= right)
	   {
		   if(array[low] < array[high])
		   {
			   temp[tmp++] = array[low++];
		   }
		   else
		   {
			   temp[tmp++] = array[high++];
		   }
	   }
	   //如果上一步比较完,两个数组其中一个依然有剩余的,将剩余的部分放入辅助数组,
	   while(low <= mid)
	   {
		   temp[tmp++] = array[low++];
	   }
	   while(high <= right)
	   {
		   temp[tmp++] = array[high++];
	   }
	   //将辅助数组中的值拷贝到原数组中
	  for (int i = left; i <= right; i++)
	{
		array[i] = temp[i];
	}
   }



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值