将2个按升序排列的数列,仍按升序合并存放到另一个数组中,要求,每个数都一次到为,不得在新数组中重新排序

如题所述

第1个回答  2008-04-07
merge sort的一个子程序(假设两个数列是由小到大的)
void merge(int arr1[], int arr2[], int arr3[], int len1, int len2){
//arr1,arr2表示两个数组。arr3是新数组,且长度足够
//len1:arr1的长度 len2同理
int i=0,j=0,pos=0;
for(;i<=len1-1 && j<=len2-1;++pos){
if(arr1[i]<arr2[j])
arr3[pos]=arr1[i++];
else
arr3[pos]=arr2[j++];
}
}
for(;i<=len1-1;++i)
arr3[++pos]=arr1[i];
for(;j<=len2-1;++j)
arr3[++pos]=arr1[j];
}本回答被提问者采纳
第2个回答  2008-04-07
#include <stdio.h>
#include <stdlib.h>

void func(int arr_dst[], int arr_1[], int len_1, int arr_2[], int len_2) {
int i, j, k;

for (i=j=k=0; i<len_1; ++i) {
while (j<len_2 && arr_1[i]>arr_2[j]) {
arr_dst[k++] = arr_2[j];
++j;
}

arr_dst[k++] = arr_1[i];
}

while (j < len_2) {
arr_dst[k++] = arr_2[j++];
}
}

int main() {
int arr1[] = {1, 3, 5, 7, 8, 9},
arr2[] = {2, 4, 5, 6, 7, 10, 23, 26};
int arr[256];
func(arr, arr1, 6, arr2, 8);
for(int i=0; i<14; ++i)
printf("%d ", arr[i]);
puts("\n");
}
相似回答