C++问题
阵列合并总览
编写程序以合并两个数组
方向
例如,考虑两个数组A和B。
A = {10,25,35,40,55}
B = {15,30,5,20,45,65}
合并后的数组应该是具有元素{5,10,15,20,25,30,35,40,45,55,65}的另一个数组C。结果合并数组应按排序顺序包含A和B的所有元素。这并不意味着您可以将两个数组复制到第三个数组,然后对结果数组进行排序。但是,必须将两个数组的内容一一对应地合并到两个数组中,然后将其插入适当位置的结果数组中,以便合并后立即对其进行排序。 本帖最后由 jackz007 于 2020-11-18 14:32 编辑
#include <stdio.h>
void swap(int * a , int * b)
{
int t ;
t = * a ;
* a = * b ;
* b = t ;
}
// 显示数组元素
void show(int d[] , int n)
{
int k ;
printf("%d" , d) ;
for(k = 1 ; k < n ; k ++) printf("\t%d" , d) ;
printf("\n") ;
}
// 数组元素排序
void sort(int d[] , int n)
{
int i , j , t ;
for(i = 0 ; i < n - 1 ; i ++) for(j = i + 1 ; j && d < d ; j --) swap(& d , & d) ;
}
// 数组元素倒序
void reverse(int d[] , int n)
{
int k ;
for(k = 0 ; k < n / 2 ; k ++) swap(& d , & d) ;
}
// 数组元素合并
int merge(int c[] , int a[] , int na , int b[] , int nb)
{
int k , m ;
for(m = 0 , k = 0 ; k < na ; m ++ , k ++) c = a ;
for(k = 0 ; k < nb ; m ++ , k ++) c = b ;
return m ;
}
int main(void)
{
int A[] = {10 , 25 , 35 , 40 , 55} , na = 5 ;
int B[] = {15 , 30 , 5 , 20 , 45 , 65} , nb = 6 ;
int C = {0} , nc ;
nc = merge(C , A , na , B , nb) ;
sort(C , nc) ;
show(C , nc) ;
printf("\n") ;
}
编译、运行实况:
D:\00.Excise\C>g++ -o sort sort.c
D:\00.Excise\C>sort
5 10 15 20 25 30 35 40 45 55
65
D:\00.Excise\C>
页:
[1]