c++中将两个降序的一维数组合并成一个降序的一维数组,用数组即可,不用指针。

合并过程数据始终保持有序,即不能把两个降序的一维数组先合并再排序,而是首先直接排序得到合并的数组。

#include<stdio.h>
#include<stdlib.h>

#define N1 5
#define N2 5

void merge(int *A,int n1,int *B,int n2,int *C,int n3)
{//A,B为已降序排好的数列;C为合并的数列
//n1,n2,n3分别为数组A,B,C的长度
int i,j,k;
k=i=j=0;
while(i<n1 && j<n2)
{//把A,B中元素从大到小,插入到数组C中
if(A[i]>B[j])
{
C[k]=A[i];
k++;
i++;
}
else
{
C[k]=B[j];
k++;
j++;
}
}
// A,B中,一定有个数组的元素先插入完了
if(i>=n1)//A中元素完了,而B还没
while(j<n2 && k<n3)
{
C[k]=B[j];
k++;
j++;
}

if(j>=n1)//B中元素完了,而A还没
while(i<n1 && k<n3)
{
C[k]=A[i];
k++;
i++;
}

}

void main()
{
int A[N1]={9,5,3,2,0};
int B[N2]={8,7,6,4,1};
int *C;
int i;
int N3=N1+N2;
C=(int*)malloc(sizeof(int)*N3);
merge(A,N1,B,N2,C,N3);

for(i=0;i<N3;i++)
printf("%d ",C[i]);
}

你看看,希望对你有帮助;这种方法叫归并排序,你也可以在网上看看这个算法,结合程序理解下!
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-06-14
随便编的,发现自己不太行啊。。。
#include<iostream>

#define LEN_A 5
#define LEN_B 6

using namespace std;

int main()
{

int a[LEN_A]={9,7,5,3,1};
int b[LEN_B]={10,8,6,4,2,0};

int c[LEN_A+LEN_B]={0};

int count=0;
int i=0;
int j=0;
while(i<LEN_A&&j<LEN_B)
{

if(a[i]>b[j])
{
c[count]=a[i];
i++;
count++;
}

if(a[i]<=b[j])
{
c[count]=b[j];
j++;
count++;
}
}

while(i<LEN_A)
{
c[count++]=a[i++];
}

while(j<LEN_B)
{
c[count++]=b[j++];
}

for(i=0;i<LEN_A+LEN_B;i++)
{
cout<<c[i]<<endl;
}

return 0;
}

c++中将两个降序的一维数组合并成一个降序的一维数组,用数组即可,不用...
define N2 5 void merge(int *A,int n1,int *B,int n2,int *C,int n3){\/\/A,B为已降序排好的数列;C为合并的数列 \/\/n1,n2,n3分别为数组A,B,C的长度 int i,j,k;k=i=j=0;while(i<n1 && j<n2){\/\/把A,B中元素从大到小,插入到数组C中 if(A[i]>B[j]){ C[k]=A[i...

C++二维数组改为一维数组使用的问题
return; }void multi(int middle[],int m1,int n,int matrix2[],int m2,int result[]){\/\/m1,n row col of middle;\/\/n,m2 row col of matrix2;\/\/m1,m2 row col of result int i,j,k; for (i=

怎样用C++把两个数组合并到一起形成一个新的数组,不需要合并后排序
2 4 6 5 57 9 10 3 0

C++问题:如何定义一个未知大小的一维数组,数组大小由输入的值决定
现代c++程序一般用容器vector代替数组。vector<int> vec;添加值(比如1)用vec.pushback(1)

C语言,将两个数组中的字符串合并为一个,不能用连接函数
include<stdio.h> int main(){ char s1[100],s2[100],s3[200];int a,b,c;gets(s1);gets(s2);for(a=0,c=0;s1[a];){s3[c++]=s1[a++];} for(a=0;s2[a];){s3[c++]=s2[a++];} s3[c]=s2[a];puts(s3);getch();} ...

C++用sort排列一维数组(升序、降序、期间排序)
sort是一种快速排序方法,默认是的排序方法是升序,可以将指定区间的数据进行排序,减少排列时写的代码。(又可以偷亿点点懒)这期主要给大家讲解如何排列一维数组,废话不多说,直接实操。sort从小到大排序(升序)sort(参数一,参数二);参数一:数组名 + 开始排列的下标(如果排列的下标为0,中括号...

C++在不用指针或数组的情况下,怎样返回两个或多个值?
C++在不用指针或数组的情况下无法返回多个值,return 只能返回一个值,而且这个值是个数值(指针是内存地址,也是个数值)想返回多个值,可采用以下方法:一、通过函数参数返回 void max_min( int *a, int n, int *max, int *min ) \/\/若想带回数据,返回的参数必须是指针类型{ int i; ...

c++两个数组合并成一个新数组
举报 VermouthTaste 推荐于2016-11-04 可以先定义c[9]将数组a,b的数放入,然后再利用冒泡法(其他排序法也可以)对数组c进行排序 追问 能给一段代码么 追答 int main(){int a[4]={1,2,3,4},b[5]={5,6,7,8,9};int c[9];int i=0,j,buffer; for(i=0;i<4;i++)c[i]=a[...

请教C++二维数组和指针的简单问题。
主要是明白*s[2]这个是什么。其实有两个操作符,一个是解引用操作符*;另外一个是下标操作符[]。查一下优先级吧。应该先是下标操作所以*s[2]变成了*(s[2])。那么s[2]是什么呢?其实由定义char s[4][6]可以明白。s中存放的是指向字符串的指针。s[2]是一个指针,指向一个字符串。由下标...

java怎么把两个从小到大排序的一维数组合并成一个从小到大排序的一维...
public static void main(String[]args){ \/\/创建数组 String[] a = { "0", "3", "2", "1" };String[] b = { "8", "7", "6", "5", "4" };String[] c = new String[a.length + b.length];\/\/复制数据 System.arraycopy(a, 0, c, 0, a.length);System.arraycopy(...

相似回答
大家正在搜