⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 max_sum.c

📁 数据结构与算法分析(C语言描述)的源代码 里面的代码的质量非常高
💻 C
字号:
#include <stdio.h>/* Define one of CubicAlgorithm, QuadraticAlgorithm, NlogNAlgorithm, * or LinearAlgorithm to get one algorithm compiled */#define NlogNAlgorithm#ifdef CubicAlgorithm/* START: fig2_5.txt */        int        MaxSubsequenceSum( const int A[ ], int N )        {            int ThisSum, MaxSum, i, j, k;/* 1*/      MaxSum = 0;/* 2*/      for( i = 0; i < N; i++ )/* 3*/          for( j = i; j < N; j++ )                {/* 4*/              ThisSum = 0;/* 5*/              for( k = i; k <= j; k++ )/* 6*/                  ThisSum += A[ k ];/* 7*/              if( ThisSum > MaxSum )/* 8*/                  MaxSum = ThisSum;                }/* 9*/      return MaxSum;        }/* END */#endif#ifdef QuadraticAlgorithm/* START: fig2_6.txt */        int        MaxSubsequenceSum( const int A[ ], int N )        {            int ThisSum, MaxSum, i, j;/* 1*/      MaxSum = 0;/* 2*/      for( i = 0; i < N; i++ )            {/* 3*/          ThisSum = 0;/* 4*/          for( j = i; j < N; j++ )                {/* 5*/              ThisSum += A[ j ];/* 6*/              if( ThisSum > MaxSum )/* 7*/                  MaxSum = ThisSum;                }            }/* 8*/      return MaxSum;        }/* END */#endif#ifdef NlogNAlgorithm        static int        Max3( int A, int B, int C )        {            return A > B ? A > C ? A : C : B > C ? B : C;        }/* START: fig2_7.txt */        static int        MaxSubSum( const int A[ ], int Left, int Right )        {            int MaxLeftSum, MaxRightSum;            int MaxLeftBorderSum, MaxRightBorderSum;            int LeftBorderSum, RightBorderSum;            int Center, i;/* 1*/      if( Left == Right )  /* Base case *//* 2*/          if( A[ Left ] > 0 )/* 3*/              return A[ Left ];                else/* 4*/              return 0;/* 5*/      Center = ( Left + Right ) / 2;/* 6*/      MaxLeftSum = MaxSubSum( A, Left, Center );/* 7*/      MaxRightSum = MaxSubSum( A, Center + 1, Right );/* 8*/      MaxLeftBorderSum = 0; LeftBorderSum = 0;/* 9*/      for( i = Center; i >= Left; i-- )            {/*10*/          LeftBorderSum += A[ i ];/*11*/          if( LeftBorderSum > MaxLeftBorderSum )/*12*/              MaxLeftBorderSum = LeftBorderSum;            }/*13*/      MaxRightBorderSum = 0; RightBorderSum = 0;/*14*/      for( i = Center + 1; i <= Right; i++ )            {/*15*/          RightBorderSum += A[ i ];/*16*/          if( RightBorderSum > MaxRightBorderSum )/*17*/              MaxRightBorderSum = RightBorderSum;            }/*18*/      return Max3( MaxLeftSum, MaxRightSum,/*19*/                          MaxLeftBorderSum + MaxRightBorderSum );        }        int        MaxSubsequenceSum( const int A[ ], int N )        {            return MaxSubSum( A, 0, N - 1 );        }/* END */#endif#ifdef LinearAlgorithm/* START: fig2_8.txt */        int        MaxSubsequenceSum( const int A[ ], int N )        {            int ThisSum, MaxSum, j;/* 1*/      ThisSum = MaxSum = 0;/* 2*/      for( j = 0; j < N; j++ )            {/* 3*/          ThisSum += A[ j ];/* 4*/          if( ThisSum > MaxSum )/* 5*/              MaxSum = ThisSum;/* 6*/          else if( ThisSum < 0 )/* 7*/              ThisSum = 0;            }/* 8*/      return MaxSum;        }/* END */#endifmain( ){    static int A[ ] = { 4, -3, 5, -2, -1, 2, 6, -2 };    printf( "Maxsum = %d\n",            MaxSubsequenceSum( A, sizeof( A ) / sizeof( A[ 0 ] ) ) );    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -