#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 12
typedef struct subIdx {
int begin;
int end;
} SUB_IDX;
typedef struct maxSub {
SUB_IDX subPosition;
int num;
} MAX_SUB;
MAX_SUB * MaxSubScan(const int* array, int len)
{
SUB_IDX MaxPreIdx;
MaxPreIdx.begin = 0;
MaxPreIdx.end = 0;
SUB_IDX MaxCurIdx;
MaxCurIdx.begin = 0;
MaxCurIdx.end = 0;
int i;
for (i = 1 ; i < len; i++) {
if (array[i]>=array[i-1]) {
MaxCurIdx.end = i;
} else {
MaxCurIdx.begin = i ;
MaxCurIdx.end = i ;
}
if ((MaxCurIdx.end-MaxCurIdx.begin)>(MaxPreIdx.end-MaxPreIdx.begin))
{
MaxPreIdx.begin = MaxCurIdx.begin;
MaxPreIdx.end = MaxCurIdx.end;
}
}
MAX_SUB *maxsub = (MAX_SUB *) malloc( sizeof(MAX_SUB) );
maxsub->subPosition.begin = MaxPreIdx.begin;
maxsub->subPosition.end = MaxPreIdx.end;
maxsub->num = MaxPreIdx.end-MaxPreIdx.begin+1;
return maxsub;
}
int main()
{
int a[MAXSIZE] = {3,8,2,6,12,4,19,6,13,14,15,16};
MAX_SUB *maxsub_result = (MAX_SUB *) malloc( sizeof(MAX_SUB) );
maxsub_result = MaxSubScan(a,MAXSIZE);
int beginindex,endindex,i;
beginindex = maxsub_result->subPosition.begin;
endindex = maxsub_result->subPosition.end;
printf("下标范围:%d----%d\n",beginindex,endindex);
printf("最大上升子串为:");
for(i=beginindex;i<endindex+1;i++)
{
printf("%-4d",a[i]);
}
printf("\n最大上升子串长度为:%d",maxsub_result->num);
}