顺序表应用6:有序顺序表查询

时间:2021-03-20 10:29:04
#include<iostream>
#include<algorithm>

using namespace std;

const int maxn=20010;

typedef struct
{
int *emue;
int lengh;
}lis;

void initlist(lis *L)///顺�表���
{
L->emue=new int [maxn];
L->lengh=0;
}

void creat(lis &L, int k)///建表
{
L.lengh=k;
for(int i=0;i<L.lengh;i++)
{
cin>>L.emue[i];
}
}

void del(lis &L, int k)///��
{
for(int i=k;i<L.lengh-1;i++)
L.emue[i]=L.emue[i+1];
L.lengh--;
}


void loclist(lis &L)///����
{
for(int i=0;i<L.lengh-1;i++)
for(int j=i+1;j<L.lengh;j++)
{
if(L.emue[i]==L.emue[j])
{
del(L, j);
j--;
}
}
}

void mov(lis &L, int n, int m)///移�
{
for(int i=0;i<m;i++)
L.emue[i+n]=L.emue[i];
}


void creatdel(lis &L, int m)///边建边�
{
L.emue=new int [m];
L.lengh=0;
int num=0;
int x, flag;
while(num<m)
{
cin>>x;
num++;
if(L.lengh==0)
{
L.emue[0]=x;
L.lengh++;
}
else
{
flag=1;
for(int i=0;i<L.lengh;i++)
{
if(L.emue[i]==x)
{
flag=0;
break;
}
}
if(flag)
{
L.emue[L.lengh]=x;
L.lengh++;
}
}
}
}

int order(lis &L, int n)
{
int x, mid, low, high;
cin>>x;
low=0;
high=n-1;
while(low<=high)
{
mid=(low+high)/2;
if(x>L.emue[mid])
low=mid+1;
else if(x<L.emue[mid])
high=mid-1;
else return mid;
}
return -1;
}

int main()
{
ios::sync_with_stdio(false);
lis L;
int m, n;
cin>>n;
initlist(&L);
creat(L, n);
cin>>m;
while(m--)
{
int t;
t=order(L, n);
if(t==-1)
cout<<"No Found!"<<endl;
else cout<<t+1<<endl;
}
return 0;
}


上个代码提交的时候需要看服务器的状态,也就是说得看脸。长得丑的就得超时,新改进了一下。

#include<iostream>
#include<algorithm>

using namespace std;

const int maxn=20010;

typedef struct
{
int *emue;
int lengh;
}lis;

void initlist(lis *L)///顺�表���
{
L->emue=new int [maxn];
L->lengh=0;
}

void creat(lis &L, int k)///建表
{
L.lengh=k;
for(int i=0;i<L.lengh;i++)
{
cin>>L.emue[i];
}
}

int order(lis &L, int l, int r, int x)
{
int mid, low, high;
low=l;
high=r;
if(low<=high)
{
mid=(low+high)/2;
if(x>L.emue[mid])
return order(L, mid+1, high, x);
else if(x<L.emue[mid])
return order(L, low, mid-1, x);
else
{
cout<<mid+1<<endl;
return 0;
}
}
else
{
cout<<"No Found!"<<endl;
return -1;
}
}

int main()
{
ios::sync_with_stdio(false);
lis L;
int m, n;
cin>>n;
initlist(&L);
creat(L, n);
cin>>m;
while(m--)
{
int t;
cin>>t;
order(L, 0, n-1, t);
}
return 0;
}