排序之二分排序

package csu.sort;

import java.util.Arrays;
import java.util.Random;

/**
 * 归并排序
 * 基本思想:就是合并两个有序的数组,采用的是分治策略,把一个数组分为若干个子数组;
 * 子数组的长度为1的时候,则子数组有序,于是可以两两归并
 * 时间复杂度最好最坏的结果都是O(n*logn)
 * 空间复杂度为O(n)
 * @author wkp
 *
 */
public class MergeSort {
	/**
	 * @param a 有序数组a
	 * @param b 有序数组b
	 * @return arr 合并之后的有序数组arr
	 */
      public int[] mergeArr(int[] a,int[] b){
    	  int[] arr = new int[a.length+b.length];//合并的数组
    	  int i=0,j=0,k=0;
    	  
    	  while(i<a.length&&j<b.length){
    		 if(a[i]<b[j]){
    			 arr[k++]=a[i];
    			 i++;
    		 }
    		 else{
    			 arr[k++]=b[j];
    			 j++;
    		 }
    	  }
    	  while(i<a.length){
    		  arr[k++] = a[i++];
    	  }
    	  while(j<b.length){
    		  arr[k++] = b[j++];
    	  }
    	  return arr;
      }
      public int[] mergeSort(int[] arr){
    	  if(arr.length==1){
    		  return arr;
    	  }
    	  int mid = arr.length/2;
    	  int[] leftArr = new int[mid];
    	  int[] rightArr = new int[arr.length-mid];
    	  System.arraycopy(arr, 0, leftArr, 0,leftArr.length);
    	  System.arraycopy(arr, mid, rightArr,0, rightArr.length);
    	  leftArr = mergeSort(leftArr);
    	  rightArr = mergeSort(rightArr);
    	  return mergeArr(leftArr,rightArr);
    	  
      }
      public static void main(String[] args) {
		Random ran = new Random();
		int[] arr = new int[20];
		for(int i=0;i<20;i++){
			arr[i] = ran.nextInt(100);
		}
		MergeSort ms = new MergeSort();
		ms.mergeSort(arr);
		
		System.out.println(Arrays.toString(arr));
	}
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值