本帖最后由 jackz007 于 2021-10-31 13:08 编辑 #include <stdio.h>
void merge(int a[] , int n , int b[] , int m)
{
int i , j , k ;
if(n > 1 && m > 1) {
if(a[1] > a[0] && b[1] > b[0] || a[1] < a[0] && b[1] < b[0]) {
if(a[1] > a[0]) {
for(i = 0 ; i < n ; i ++) {
for(j = 0 ; j < m && b[j] < a[i] ;) {
for(k = n ; k > i ; k --) a[k] = a[k - 1] ;
a[i] = b[j] ;
for(k = j + 1 ; k < m ; k ++) b[k - 1] = b[k] ;
n ++ ;
m -- ;
}
}
} else {
for(i = 0 ; i < n ; i ++) {
for(j = 0 ; j < m && b[j] > a[i] ;) {
for(k = n ; k > i ; k --) a[k] = a[k - 1] ;
a[i] = b[j] ;
for(k = j + 1 ; k < m ; k ++) b[k - 1] = b[k] ;
n ++ ;
m -- ;
}
}
}
}
}
}
int main(void)
{
int a[10] = {3 , 5 , 6 , 8 , 10} , b[5] = {1 , 2 , 4 , 7 , 9} , i ;
int c[10] = {9 , 7 , 4 , 2 , 1} , d[5] = {10 , 8 , 6 , 5 , 3} ;
merge(a , 5 , b , 5) ;
for(i = 0 ; i < 10 ; i ++) printf(" %d" , a[i]) ;
printf("\n") ;
merge(c , 5 , d , 5) ;
for(i = 0 ; i < 10 ; i ++) printf(" %d" , c[i]) ;
printf("\n") ;
}
编译、运行实况:D:\00.Excise\C>g++ -o x x.c
D:\00.Excise\C>x
1 2 3 4 5 6 7 8 9 10
10 9 8 7 6 5 4 3 2 1
D:\00.Excise\C>
|