• 每天一个小算法(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("
    ");
    49     return 0;
    50 }
  • 相关阅读:
    Hui之组件大全
    程序员交流学习平台
    PHP 常用框架
    常用浏览器
    设计必备工具、平台
    文档必备工具
    开发必备工具
    工作必备工具
    源码托管平台、软件
    前端常用框架
  • 原文地址:https://www.cnblogs.com/yrpen/p/3780403.html
Copyright © 2020-2023  润新知