每天一个小算法(1)----合并两个已经排序的数组

《15道简单算法题》伯乐在线的一篇文章,会接下来的一段时间每天花一点时间试着实现一个算法。

因为代码比较简单,故全部在main函数里实现,不会单独另外写一个函数,本代码在linux/g++编译运行正常。

今天是第一个:合并排序,将两个已经排序的数组合并成一个数组,其中一个数组能容下两个数组的所有元素;

基本思路:从后往前比较。

 1 #include <stdio.h>
 2 
 3 int main(int argc, char const *argv[])
 4 {
 5     const int aNum = 6;
 6     const int bNum = 8;
 7     int arrayIntA[aNum] = {5,9,14,23,33,56};
 8     int arrayIntB[aNum+bNum] = {6,7,15,17,20,25,30,57,0,0,0,0,0,0};
 9 
10     int iA = aNum - 1;
11     int iB = bNum - 1;
12     int iAB = aNum + bNum - 1;
13     while ( iA >= 0 && iB >= 0 && iAB >=0 )
14     {
15         if ( arrayIntA[iA] > arrayIntB[iB] )
16         {
17             arrayIntB[iAB] = arrayIntA[iA];
18             --iA;
19         }
20         else
21         {
22             arrayIntB[iAB] = arrayIntB[iB];
23             --iB;
24         }
25         --iAB;
26     }
27 
28     if ( iA < 0 )
29     {
30         while ( iAB >= 0 )
31         {
32             arrayIntB[iAB--] = arrayIntB[iB--];
33         }
34     }    
35 
36     if ( iB < 0 )
37     {
38         while ( iAB >= 0 )
39         {
40             arrayIntB[iAB--] = arrayIntA[iA--];
41         }
42     }
43 
44     for ( int i=0; i < aNum+bNum; ++i )
45     {
46         printf("%d ", arrayIntB[i]);
47     }
48     printf("\n");
49     return 0;
50 }

 

posted @ 2014-06-10 17:29  Yrpen  阅读(1850)  评论(8编辑  收藏  举报