博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
归并排序
阅读量:4880 次
发布时间:2019-06-11

本文共 885 字,大约阅读时间需要 2 分钟。

1.算法思想:

  基于分治法。将待排序序列分成两个长度相等的子序列,为每个子序列排序,然后将它们合并成一个序列。——两路归并

2.代码实现:

static void merge(int[] arr1,int[] arr2,int left,int mid,int right{//合并两个子序列,即待排序序列arr1以mid为界的左右两个子序列各自有序,将二者合成一个有序序列

  for(int i=left;i<=right;i++)
  {
    arr2[i]=arr1[i];//arr2用来存放待排序序列初始的元素
  }
  int s1=left,s2=mid+1,t=left;
  while(s1<=mid&&s2<=right){
    if(arr2[s1]<=arr2[s2])
      arr1[t++]=arr2[s1++];
    else
      arr1[t++]=arr2[s2++];
  }
  while(s1<=mid){
    arr1[t++]=arr2[s1++];
  }
  while(s2<=left){
    arr1[t++]=arr2[s2++];
  }
}
static void mergeSort(int[] a1,int[] a2,int left,int right){
  if(left>=right) return;//如果当前排序序列长度为1,则返回
  int mid=(left+right)/2;
  mergeSort(a1,a2,left,mid);//分别对以mid为分界的左右两个子序列进行归并排序
  mergeSort(a1,a2,mid+1,right);
  merge(a1,a2,left,mid,right);//将排好序的两个子序列合并
}

3.性能分析:

时间复杂度:O(nlogn)

空间复杂度:O(n)

稳定性:稳定

转载于:https://www.cnblogs.com/cheerflower/p/6706100.html

你可能感兴趣的文章
让应用在横屏模式下启动
查看>>
Intent传递list集合时异常解决
查看>>
登录验证码demo-java
查看>>
日常练习 1.0
查看>>
php集成环境
查看>>
Ubuntu下的负载均衡Web集群配置
查看>>
Create a site by Google Site - All Free
查看>>
Fragment 的基本使用
查看>>
一个谜语的十一个答案 (绝对经典)笑死人了
查看>>
mvc的个别对输入数据的验证
查看>>
typeof和GetType区别
查看>>
IBATIS事务处理 - - 博客频道 - CSDN.NET
查看>>
autoit学习安装说明及例子
查看>>
Linux常用命令(一)
查看>>
机器学习技法9-Decision Tree
查看>>
啥是文档碎片
查看>>
Nat Med:单独使用anti-CTLA4治疗前列腺癌效果差的原因
查看>>
Mycat(3)—— Linux 利用mycat实现mysql数据库读写分离
查看>>
泛型擦除
查看>>
jQuery控制form表单元素聚焦
查看>>