每天一个小算法(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 }

 

你可能感兴趣的:(算法)