用户输入两个有序的数组,请合并成一个有序数组输出。如用户输入: 1,4,5 和 2,3,8, 则输出:1,2,3,4,5,8。
直接在插入的时候判断就行了
#include<stdio.h>
#include<stdlib.h>
int main(){
int a[]={1,4,5};
int b[]={2,3,8};
int a_num=sizeof(a)/sizeof(int),
b_num = sizeof(b)/sizeof(int);
int*c = (int*)malloc(sizeof(int)*(a_num+b_num));
int i,j,index=0;
for(i=0,j=0;i<a_num&&j<b_num;){
if(a[i]<b[j]){
c[index++]=a[i++];
}else{
c[index++]=b[j++];
}
}
while(i<a_num){
c[index++]=a[i++];
}
while(j<b_num){
c[index++]=b[j++];
}
for(i=0;i<index;i++){
printf("%d ",c[i]);
}
printf("\n");
free(c);
}
可以先将两个数组合并,然后使用任何一种排序算法就可以了。合并数组的代码片段,把数组a和数组b合并为数组c。
for(i=0;i<m+n;i++)
if(i<m)
c[i]=a[i];
else
c[i]=b[i-m];
接着就是排序了,算法代码网上很多。
调用函数,合并数组
#include <stdio.h>
int merge(int* input_a, int length_a, int* input_b, int length_b, int* result )
{
int i, j, k ;
i = 0 ;
j = 0 ;
k = 0 ;
for( ; ; )
{
if ( input_a[i] <= input_b[j] ) // 输入数组a的当前元素更小
{
result[k] = input_a[i] ;
i = i + 1 ;
k = k + 1 ;
if ( i >= length_a ) //输入数组a结束
{
//把输入数组b的剩余数值全部放入result
while ( j < length_b )
{
result[k] = input_b[j] ;
k = k + 1 ;
j = j + 1 ;
}
break ; //结束循环
}
}
else // 输入数组b的当前元素更小
{
result[k] = input_b[j] ;
j = j + 1 ;
k = k + 1 ;
if ( j >= length_b ) //输入数组b结束
{
//把输入数组a的剩余数值全部放入result
while ( i < length_a )
{
result[k] = input_a[i] ;
k = k + 1 ;
i = i + 1 ;
}
break ; //结束循环
}
}
}
return k ;
}
int main(int argc, char* argv[])
{
int a[8] = { 1,4,5} ;
int b[6] = { 2,3,8} ;
int result[16] ;
int i, j;
i = merge(a,3,b,3,result);
for( j = 0; j < i; j ++ )
{
printf( "%d\n", result[j] ) ;
}
return 0;
}
优先队列了解下