1.设计一个O(n²)时间的算法。
方法如下:
①利用快速排序先将原序列排序。
②然后再计算原序列和已排序序列两者公共子序列。
③打印公共子序列。
代码如下:
/************************************************************************/
/* 算法导论15.4-5
* 找出n个数的序列中最长的单调递增子序列
* 时间复杂度为O(n^2)*/
/************************************************************************/
#include <iostream>
#include <time.h>
using namespace std;
#define N 11
char *b[N+1][N+1]={NULL};
int c[N+1][N+1]={0};
void Lcs_Length(int *x,int *y)
{
for (int i1=0;i1<=N;i1++)
{
b[i1][0]="NULL";
}
for (int j1=0;j1<=N;j1++)
{
b[0][j1]="NULL";
}
for (int i=1;i<=N;i++)
{
for (int j=1;j<=N;j++)
{
if (x[i]==y[j])
{
c[i][j]=c[i-1][j-1]+1;
b[i][j]="↖";
}
else
{
if (c[i-1][j]>=c[i][j-1])
{
c[i][j