题目要求:有两个线性表a和b,这两个线性表都是非递减有序排列,现在要把这两个线性表合并为一个非递减有序排列的c线性表。
算法思想:用i,j,k这3个指示器分别指向这3个线性表的下标,然后将a[i]和b[j]进行比较,如果a[i]
实现代码:
- #include <stdio.h>
-
-
#define intlen(x) sizeof(x)/sizeof(int) //用来计算x整型数组的长度
-
- int len_a, len_b, len_c;
-
void merge(int a[], int b[], int c[])
-
{
-
int i, j, k;
-
i = j = k = 0;
-
while(i < len_a && j < len_b) {
-
if(a[i] <= b[j]) {
-
c[k++] = a[i++];
-
} else {
-
c[k++] = b[j++];
-
}
-
}
-
while(i < len_a) {
-
c[k++] = a[i++];
-
}
-
while(j < len_b) {
-
c[k++] = b[j++];
-
}
-
}
-
-
int main()
-
{
-
int a, b, i;
-
fprintf(stdout, "Input two array size:\n");
-
fscanf(stdin, "%d%d", &a, &b);
-
int arr_a[a], arr_b[b], arr_c[a+b];
-
fprintf(stdout, "Input array a:\n");
-
for(i = 0; i < a; i++) {
-
fscanf(stdin, "%d", arr_a+i);
-
}
-
fprintf(stdout, "Input array b:\n");
-
for(i = 0; i < b; i++) {
-
fscanf(stdin, "%d", arr_b+i);
-
}
-
len_a = intlen(arr_a);
-
len_b = intlen(arr_b);
-
len_c = intlen(arr_c);
-
merge(arr_a, arr_b, arr_c);
-
fprintf(stdout, "The merged result:\n");
-
for(i = 0; i < len_c; i++) {
-
fprintf(stdout, "%d\t", arr_c[i]);
-
}
-
fprintf(stdout, "\n");
-
return 0;
- }
测试结果:
- ^_^[sunny@sunny-laptop ~/DS]31$ ./a.out
-
Input two array size:
-
3 4
-
Input array a:
-
2
-
2
-
4
-
Input array b:
-
1
-
3
-
5
-
6
-
The merged result:
-
1 2 2 3 4 5 6
- ^_^[sunny@sunny-laptop ~/DS]32$
文章评论
-
2011-09-28KakitChen
<img src="/image/face/24.gif" >用fprintf和fscanf是一个好的编程习惯呢?还是个人的代码风格?
-
2011-09-28sunjiangang-ok
<div class="quote"><span class="q"><b>KakitChen</b>: <img src="/image/face/24.gif" >用fprintf和fscanf是一个好的编程习惯呢?还是个人的代码风格?.....</span></div>这个可能是我的习惯吧,但是在printf()中调用了vsprintf()。至于是不是一个好的习惯,个人觉得printf()比较好吧。