排序——归并排序

       利用递归的思想,当N=1时,只有一个元素需要排序,为递归临界条件;否则,递归的将前半部分数据和后半部分数据各自归并排序,得到排序后的两部分数据,然后再将得到的两部分合并到一起。

  //mergeSort algorithm
   public void mergeSort(int[] data)
	{
		if(data == null || data.length<2)
		        return;
		int[] tmparray=new int[data.length];
		mergeSort(data,tmparray,0,data.length-1);
	}
  //mergeSort例程;
  public void mergeSort(int[] data,int[] tmparray,int left,int right)
  {
	  if(left>right){
	  return;}
		  int center=left+(right-left)/2;
		  mergeSort(data,tmparray,left,center);
		  mergeSort(data,tmparray,center+1,right);
		  merge(data,tmparray,left,center+1,right);

  }
  //merge例程;
  public void merge(int[] data,int[] tmparray,int leftpos,int rightpos,int rightend)
  {
	  int leftend=rightpos-1;
	  int tmppos=leftpos;
	 int index=leftpos;//记录没有更改时的leftpos,最后对data赋值时使用;
	  while(leftpos<=leftend&&rightpos<=rightend)
	  {
		  if(data[leftpos]<data[rightpos])
		  {
			  tmparray[tmppos++]=data[leftpos++];
		  }
		  else
		  {
			  tmparray[tmppos++]=data[rightpos++];
		  }
	  }
	  while(leftpos<=leftend)
	  {
		  tmparray[tmppos++]=data[leftpos++];
	  }
	  while(rightpos<=rightend)
	  {
		  tmparray[tmppos++]=data[rightpos++];
	  }
	  //将tmparray赋值给data;
	  while(index<=rightend)
	  {
		  data[index]=tmparray[index];
		  index++;
	  }
  }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值