编写程序,将两合并n个有序数组组合并成一合并n个有序数组组中

习题四-参考答案_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
习题四-参考答案
上传于||暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩11页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢两个有序数组合并为一个数组.java_中华文本库
第1页/共2页
两个有序数组合并为一个数组
主程序代码;
public class MergeApp
public static void merge(int[] arrayA,int sizeA,int[] arrayB, int sizeB,int[] arrayC){
int adex=0,bdex=0,cdex=0;
while(adex&sizeA && bdex&sizeB){
if(arrayA[adex]&arrayB[bdex])
arrayC[cdex++]=arrayA[adex++];
arrayC[cdex++]=arrayB[bdex++];
while(adex&sizeA){
arrayC[cdex++]=arrayA[adex++];
while(bdex&sizeB){
arrayC[cdex++]=arrayB[bdex++];
public static void display(int[] theArray, int size){
for(int j=0;j&j++){
System.out.print(theArray[j]+" ");
public static void main(String[] args) {
int[] arrayA={23,47,81,95};
int[] arrayB={7,14,39,55,62,74};
int[] arrayC=new int[10];
merge(arrayA,4,arrayB,6,arrayC);
display(arrayC,10);
import java.util.*;
public class txt
public static void main(String[] args)
new Scanner(System.in);
int sizeA=reader.nextInt();
int [] arrayA=new int [sizeA];
for(int i=0;i&sizeA;i++)
arrayA[i]=reader.nextInt();
System.out.println();
int sizeB=reader.nextInt();
第1页/共2页
寻找更多 ""苹果/安卓/wp
积分 2841, 距离下一级还需 759 积分
权限: 自定义头衔, 签名中使用图片, 隐身, 设置帖子权限, 设置回复可见
道具: 彩虹炫, 涂鸦板, 雷达卡, 热点灯, 金钱卡, 显身卡, 匿名卡, 抢沙发, 提升卡, 沉默卡下一级可获得
道具: 千斤顶
购买后可立即获得
权限: 隐身
道具: 金钱卡, 彩虹炫, 雷达卡, 热点灯, 涂鸦板
开心签到天数: 125 天连续签到: 1 天[LV.7]常住居民III
看一本R语言的书,其中有一个问题如下:
Write a program to merge two sorted vectors into a single sorted vector.
Do not use the sort(x) function, and try to make your program as efficient
as possible. That is, try to minimise the number of operations required to
merge the vectors.
能否一起探讨一下有效的算法,我先抛砖引玉,思想来自网络的帖子:
a &- -10:10
b &- 2:8
checkSort &- function(x) {
result = TRUE
for (i in 1:(length(x) - 1)) {
for (j in (i + 1):length(x)) {
if (x[j - 1] & x[j]){
result &- FALSE
break
}
}
}
return(result)
}
mergesort &- function(a, b) {
if (checkSort(a) & checkSort(b)){
a.length &- length(a)
b.length &- length(b)
n &- a.length + b.length
result.vec &- rep(0, n)
i &- 1
j &- 1
k &- 1
while(i &= a.length & j &= b.length){
if(a[i] &= b[j]) {
result.vec[k] &- a[i]
i &- i +1
k &- k + 1
} else {
result.vec[k] &- b[j]
j &- j + 1
k &- k + 1
}
}
while(i &= a.length) {
result.vec[k] &- a[i]
i &- i +1
k &- k + 1
}
while(j &= b.length) {
result.vec[k] &- b[j]
j &- j + 1
k &- k + 1
}
return(result.vec)
} else {
cat(&please input two sorted vectors&)
}
}
mergesort(a, b)复制代码
载入中......
mergesort算法,这个就是
鼓励积极发帖讨论
总评分:&学术水平 + 1&
热心指数 + 1&
想写一个看起来像R的排序方法,可是问题也来了。当从数组中删除最后一个元素时,R将个这个数组赋值为长度为1,值为0的数组。这个怎么处理比较好?下面是我写的代码#########################
## R style merger sort ##
#########################
m_sort &- function(iter_list){
& & stopifnot(iter_list$len&0)
& & xx &- iter_list$x;yy &- iter_list$y;kk &-iter_list$k
& & print(paste(&xx=&,length(xx),sep=&&),env=.GlobalEnv)
& & print(paste(&yy=&,length(yy),sep=&&),env=.GlobalEnv)
& & indeks &- NA
& & if(min(xx)&=min(yy) && length(xx)&0){
& && &&&vec_in_globe[kk+1] &&- min(xx)
& && &&&indeks &- which.min(xx)
& && &&&iter_list$x &- xx[-indeks]
& & }
& & if(min(yy)&min(xx) && length(yy)&0){
& && &&&vec_in_globe[kk+1] &&- min(yy)
& && &&&indeks &- which.min(yy)
& && &&&iter_list$y &- yy[-indeks]
& & }
& & iter_list$k &- kk+1
& & iter_list$len &- iter_list$len-1
& & m_sort(iter_list)
}
a &- 1:10;b &- 2:8;k &- 1;len &- length(a)+length(b)
vec_in_globe &- numeric(len)
iter_list &- list(x=a[!is.na(a)],y=b[!is.na(b)],k=k,len=len)
m_sort(iter_list)复制代码输出的结果如下:& a &- 1:10;b &- 2:8;k &- 1;len &- length(a)+length(b)
& vec_in_globe &- numeric(len)
& iter_list &- list(x=a[!is.na(a)],y=b[!is.na(b)],k=k,len=len)
& m_sort(iter_list)
[1] &xx=10&
[1] &yy=7&
[1] &xx=9&
[1] &yy=7&
[1] &xx=8&
[1] &yy=7&
[1] &xx=8&
[1] &yy=6&
[1] &xx=7&
[1] &yy=6&
[1] &xx=7&
[1] &yy=5&
[1] &xx=6&
[1] &yy=5&
[1] &xx=6&
[1] &yy=4&
[1] &xx=5&
[1] &yy=4&
[1] &xx=5&
[1] &yy=3&
[1] &xx=4&
[1] &yy=3&
[1] &xx=4&
[1] &yy=2&
[1] &xx=3&
[1] &yy=2&
[1] &xx=3&
[1] &yy=1&
[1] &xx=2&
[1] &yy=1&
[1] &xx=2&
[1] &yy=0&
[1] &xx=1&
[1] &yy=0&
Error: iter_list$len & 0 is not TRUE
In addition: Warning messages:
1: In min(yy) : no non-miss returning Inf
2: In min(yy) : no non-miss returning Inf
3: In min(yy) : no non-miss returning Inf
4: In min(yy) : no non-miss returning Inf
& vec_in_globe
[1]&&0&&1&&2&&2&&3&&3&&4&&4&&5&&5&&6&&6&&7&&7&&8&&8&&9 10复制代码期望的输出是[1]&&1&&1&&2&&2&&3&&3&&4&&4&&5&&5&&6&&6&&7&&7&&8&&8&&9 10复制代码这是对空数组赋值0造成的
总评分:&学术水平 + 1&
热心指数 + 1&
信用等级 + 1&
对任何问题当然可以持不同的观点,但不等于任何不同观点都是有价值的。
本帖最后由 kaifengedu 于
11:17 编辑 nuomin 发表于
想写一个看起来像R的排序方法,可是问题也来了。当从数组中删除最后一个元素时,R将个这个数组赋值为长度为 ...您好,您在程序里面令k&-0就会出现正确结果,另外看到您程序里有一些警告,可以修改如下就不出现警告了。#########################
## R style merger sort ##
#########################
m_sort &- function(iter_list){
&&stopifnot(iter_list$len&0)
&&xx &- iter_list$x;yy &- iter_list$y;kk &-iter_list$k
&&indeks &- NA
&&if (length(xx)&0 && length(yy)&0){
& & if(min(xx)&=min(yy)){
& && &print(paste(&xx=&,length(xx),sep=&&),env=.GlobalEnv)
& && &vec_in_globe[kk+1] &&- min(xx)
& && &indeks &- which.min(xx)
& && &iter_list$x &- xx[-indeks]
& & }
& & if(min(yy)&min(xx)){
& && &print(paste(&yy=&,length(yy),sep=&&),env=.GlobalEnv)
& && &vec_in_globe[kk+1] &&- min(yy)
& && &indeks &- which.min(yy)
& && &iter_list$y &- yy[-indeks]
& & }
& &
&&}else if(length(xx)&0) {
& & print(paste(&xx=&,length(xx),sep=&&),env=.GlobalEnv)
& & vec_in_globe[kk+1] &&- min(xx)
& & indeks &- which.min(xx)
& & iter_list$x &- xx[-indeks]
&&} else if (length(yy)&0) {
& & print(paste(&yy=&,length(yy),sep=&&),env=.GlobalEnv)
& & vec_in_globe[kk+1] &&- min(yy)
& & indeks &- which.min(yy)
& & iter_list$y &- yy[-indeks]
&&}
&&
&&iter_list$k &- kk+1
&&iter_list$len &- iter_list$len-1
&&m_sort(iter_list)
}
a &- 1:10;
b &- 2:8;
k &- 0;
len &- length(a)+length(b)
vec_in_globe &- numeric(len)
iter_list &- list(x=a[!is.na(a)],y=b[!is.na(b)],k=k,len=len)
m_sort(iter_list)
vec_in_globe复制代码结果是:
& m_sort(iter_list)
[1] &xx=10&
[1] &xx=9&
[1] &yy=7&
[1] &xx=8&
[1] &yy=6&
[1] &xx=7&
[1] &yy=5&
[1] &xx=6&
[1] &yy=4&
[1] &xx=5&
[1] &yy=3&
[1] &xx=4&
[1] &yy=2&
[1] &xx=3&
[1] &yy=1&
[1] &xx=2&
[1] &xx=1&
Error: iter_list$len & 0 is not TRUE
& vec_in_globe
[1] 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 10复制代码
另外想请问一下,您的这行命令里
print(paste(&yy=&,length(yy),sep=&&),env=.GlobalEnv)复制代码env=.GlobalEnv有什么样的作用,谢谢!
kaifengedu 发表于
您好,您在程序里面令k在最顶端的环境输出
对任何问题当然可以持不同的观点,但不等于任何不同观点都是有价值的。
无限扩大经管职场人脉圈!每天抽选10位免费名额,现在就扫& 论坛VIP& 贵宾会员& 可免费加入
加入我们,立即就学扫码下载「就学」app& Join us!& JoinLearn&
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
如有投资本站或合作意向,请联系(010-);
邮箱:service@pinggu.org
投诉或不良信息处理:(010-)
京ICP证090565号
京公网安备号
论坛法律顾问:王进律师C语言向有序数组中插入一个数使该数组仍保持有序
C语言向有序数组中插入一个数使该数组仍保持有序
  C语言向有序数组中插入一个数使该数组仍保持有序
  先看Linux下运行结果:
  #include&stdio.h& /*向有序的数组中插入一个数使该数组仍有序*/#define N 5
  void sort(int a[],int num){&int i,j,t1,t2;&int end=a[N-2];&if(num&=end)& a[N-1]=&else&{& for(i=0;i&N-1;i++)& &
if(a[i]&num)& &{& & t1=a[i]; //先保存当前位置的值& & a[i]= //插入数值& & for(j=i+1;j&N;j++)& &
{ //以下三行将插入位置之后的数依次向后移动& & &t2=a[j];& & &a[j]=t1;& & &t1=t2;& & & & }& & //找到合适的位置后就终止外层循环& &}&}}
  int main(){&int a[N]={5,10,20,50};&int i=0;&
  printf("原数组:");&for(i=0;a[i]!='\0';i++)&printf("%d\t",a[i]);
  printf("\n输入要插入的数:");&scanf("%d",&num);
  sort(a,num);&printf("新的数组:");&for(i=0;i&N;i++)&printf("%d\t",a[i]);&printf("\n");&return 0;}
  将C语言梳理一下,分布在以下10个章节中:
Linux-C成长之路(一):Linux下C编程概要 Linux-C成长之路(二):基本数据类型 Linux-C成长之路(三):基本IO函数操作 Linux-C成长之路(四):运算符 Linux-C成长之路(五):控制流 Linux-C成长之路(六):函数要义 Linux-C成长之路(七):数组与指针 Linux-C成长之路(八):存储类,动态内存 Linux-C成长之路(九):复合数据类型 Linux-C成长之路(十):其他高级议题
  C++ Primer Plus 第6版 中文版 清晰有书签PDF+源代码
  本文永久更新链接地址:
H3C认证Java认证Oracle认证
基础英语软考英语项目管理英语职场英语
.NETPowerBuilderWeb开发游戏开发Perl
二级模拟试题一级模拟试题一级考试经验四级考试资料
软件测试软件外包系统分析与建模敏捷开发
法律法规历年试题软考英语网络管理员系统架构设计师信息系统监理师
高级通信工程师考试大纲设备环境综合能力
路由技术网络存储无线网络网络设备
CPMP考试prince2认证项目范围管理项目配置管理项目管理案例项目经理项目干系人管理
职称考试题目
招生信息考研政治
网络安全安全设置工具使用手机安全
生物识别传感器物联网传输层物联网前沿技术物联网案例分析
Java核心技术J2ME教程
Linux系统管理Linux编程Linux安全AIX教程
Windows系统管理Windows教程Windows网络管理Windows故障
数据库开发Sybase数据库Informix数据库
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&您的举报已经提交成功,我们将尽快处理,谢谢!
#include &stdio.h&main() { int i,j,a[5],b[5],c[10], for(i=0;i&5;i+...
void sort(int *p, int n){
for(i=0;i&n-1;i++){
for(j=i+1;j&n;j++)...
注意思维 , 先将两个合并,在排序 #include main() { int a[3]={1,2,3},b[2]={5,6},c[3+2],t,i,j; fo...
#include &stdio.h&int main(){int a[10],i,j;for(i=0;i&10;i++){printf("请输...
操作说明:
1、在G列,输入拟统计的A列项目名称,如绿色区域;在H1,输入公式“=SUMPRODUCT(($A$1:$A$6=$G1)*B$1:B$6)”,并...
大家还关注

我要回帖

更多关于 合并n个有序数组 的文章

 

随机推荐