问题:设计一个O(n^2)时间算法,找出由n个数组成的序列的最长单调递增子序列。
C语言实现如下:
#include<stdio.h>
void find_max_str(int str[],int length);
int main() {
int str[] = { 2,1,4,7,8,-1,20,-7,6,8,10,45,43,2 };
find_max_str(str,sizeof(str)/4);
return 0;
}
void find_max_str(int str[],int length){
//形参length代表原来数组的长度
//变量count代表最大有序数组的长度
//变量index代表最大有序数组的第一个元素下标
int index,count=0,i,j;
for( i=0;i<length;i++){
for( j=i+1;j<length;j++){
if(str[j]<str[j-1])
break;
}
if((j-i)>count){
//记录当前最长的有序子序列的长度和这个序列的开始下标
count=j-i;
index=i;
}
}
printf("最大的有序数列为:\t");
for(int x=index;x<(count+index);x++){
printf("%d ",str[x]);
}
return ;
}