void merge(int A[], int m, int B[], int n) {
int *a=A,*b=B;
int i=,j=;
if(n==||m==){ //针对特殊情况,比如A或B中无元素的情况
if(n==&&m!=||n==&&m==)
return;
else
for(i=;i<n;i++)
A[i]=B[i];
return;
}
do{
while(*b>=*a&&i<m){
a++;
i++; // i记录A中要插入的位置
}
for(j=m;j>i;j--) //A中从第i个开始往后移动一位
A[j]=A[j-];
*a=*b;
m++; //每循环一次,A中元素增加一个
b++; //b指针往后取元素
n--;
a++; //a指针也往后移一位,指向刚插进去的元素的后一个元素
i++;
}while(n>);
return;
}

题意:将两个有序的数组(升序)合并为一个有序的数组(升序),将合并后的数组存储在A中。

注意:要考虑数组A或B中可能没有元素的情况。以数组作为实参传给形参传的是地址,所以在这个函数中操作数组A和B是直接对数组的直接操作,而m和n就只是盏中的一个实参副本,可随便改。

思路:把B中的元素从小到大逐个取出来,插入到A中去,要将合适位置后面的所有元素往后移一位。几乎每插一个进A都要移动A中的元素,除非特殊情况,如B中的最小元素比A中的最大元素要大,那么就不需要移动了。这个算法的效率还是不怎样的,应该有更好的算法,只是这个挺简洁的了。

最新文章

  1. C#编写windows服务
  2. 解决Strokeit在win8下的图标问题和开机启动问题
  3. HashBytes(Transact-SQL)
  4. Python读取文本,输出指定中文(字符串)
  5. Leetcode: Sort Characters By Frequency
  6. 慕课网JavaScript入门篇课程笔记
  7. 安卓开发_浅谈Android动画(二)
  8. Struts2原码分析系列之一
  9. Mtk Android 打包解包*.img
  10. NopCommerce架构分析之一----依赖类生成容器
  11. windows7 jdk 环境变量添加
  12. 微信OPENID授权方法
  13. Socket 学习(三)
  14. 用Maven创建web项目
  15. Java的按位操作符
  16. Django框架简介-路由系统
  17. (转)通过 Javacore 诊断线程挂起等性能问题
  18. ELK初探
  19. c# 16进制转int
  20. 了解dto概念,什么是DTO

热门文章

  1. Instruments10 分析某个类中方法的执行时间
  2. 使用MailMessage发送邮件
  3. InnoDB recovery过程解析
  4. 如何给自己的开源项目选择和添加 License
  5. 786A(博弈&amp;bfs)
  6. Leetcode初级算法(链表篇)
  7. 6、kvm克隆虚拟机
  8. 我的Android Studio配置
  9. 文件拷贝io nio比较
  10. Docker从入门到实战(二)