C语言两个数组里边有十个元素把两个合并成一个并排序

如题所述

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

#define NUM 10

void paixu(int * array, int n)//选择排序法
{
int i, j, temp, pos;
for(i=0;i<n;i++)
{
pos = i;
for(j=i+1;j<n;j++) if(array[pos] > array[j]) pos = j;
if(pos != i) {temp = array[pos]; array[pos] = array[i]; array[i] = temp;}
}
}
void hebing(int * array, const int * arrA, int nA, const int * arrB, int nB)//合并数据,这个是并归排序的基本函数,里面加上递归调用就是并归排序
{
int pos = 0, posA = 0, posB = 0;
while(posA<nA && posB < nB)
{
if(arrA[posA] < arrB[posB]) array[pos++] = arrA[posA++];
else array[pos++] = arrB[posB++];
}
if(posA<nA) while(posA<nA) array[pos++] = arrA[posA++];
if(posB<nB) while(posB<nB) array[pos++] = arrB[posB++];
}

void print(int *a, int n)
{
int i;
for(i=0; i<n;i++)
{
printf("%6d", a[i]);
if(i%10 == 9) printf("\n");
}
}

int main()
{
int a[NUM], b[NUM], c[NUM*2], i;

srand(time(NULL));
for(i=0;i<NUM;i++) {a[i] = rand() & 0xF; b[i] = rand() & 0xF;}//随机数作为输入
printf("原始数据:\n");
print(a, NUM);
print(b, NUM);
paixu(a, NUM);
paixu(b, NUM);
printf("排序后的数据:\n");
print(a, NUM);
print(b, NUM);
hebing(c, a, NUM, b, NUM);
printf("合并后的数据:\n");
print(c, NUM*2);
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-12
#include <stdio.h>

#define N 10

int main( void )
{
int a[N], b[N],c[2*N];
int i, j, temp;

printf( "请输入数组a的值:\n");

for( i = 0; i < N; i++ )
scanf( "%d", &a[i] );

printf( "请输入数组b的值:\n");
for( i = 0; i < N; i++ )
scanf( "%d", &b[i] );

for( i = 0; i < N; i++ ){
c[i] = a[i];
c[i+N] = b[i];
}

for(i = 0; i < 2 * N - 1; i++ )
for( j = i + 1; j < 2 * N; j++ )
if( c[i] > c[j] ){
temp = c[i];
c[i] = c[j];
c[j] =temp;
}

printf( "a数组的各个元素为:\n" );
for( i = 0; i < N; i++ )
printf( "%d\t", a[i] );

printf( "\nb数组的各个元素为:\n" );
for( i = 0; i < N; i++ )
printf( "%d\t", b[i] );

printf( "\nc数组的各个元素为:\n" );
for( i = 0; i < 2 * N; i++ )
printf( "%d\t", c[i] );

return 0;
}
第2个回答  2013-12-12
#include<stdio.h>
#define SWAP(a,b) {int swap = 0;swap=a; a=b; b=swap;}
void sort_fun(int *in1, int *in2, int *out)
{
int i = 0;
int j = 0;
for (i=0; i<10; i++)//将两个数组合并为一个数组
{
out[j++] = in1[i];
out[j++] = in2[i];
}
for (i=0; i<19; i++)
{
for (j=i+1; j<20; j++)
{
if(out[i]<out[j])
{
SWAP(out[i],out[j]);//数组3排序
}
}
}
}
int main()
{
int a[10]={1,3,2,20,5,3,7,3,7,9};
int b[10]={2,4,2,5,1,0,8,5,3,5};
int c[20]={0};
int i,j;
sort_fun(a, b, c);
for(i=0; i<10; i++)
{
printf("%d ",a[i]);
}
printf("\n");
for(i=0; i<10; i++)
{
printf("%d ",b[i]);
}
printf("\n");
for(i=0; i<20; i++)
{
printf("%d ",c[i]);
}
printf("\n");
return 0;
}
相似回答