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