从已经有序的线性表{a1,a2,…,an}中查找元素值为x的,如果查找失败,则将x插入,并保持有序。要求时间复杂度最低。
#include <iostream>
using namespace std;
/*
*writer:yaojinhui
*/
using namespace std;
typedef struct
{
int *base;
int length;
}SqList;
void InitSqList(SqList &L)
{
L.base=new int[100];
L.length=8;
}
void create(SqList &L)
{
for(int i=0;i<L.length;i++)
L.base[i]=2*i+1;
}
void search(SqList &L,int e)
{
int i,j,low,high,mid;
low=1,high=L.length;
while(low<=high)
{
mid=(low+high)/2;
if(e==L.base[mid])
{
cout<<"查找成功,其下标为:"<<mid<<endl;
break;
}
else if(e<L.base[mid])
high=mid-1;
else if(e>L.base[mid])
low=mid+1;
}
if(low>high)
{
for(i=L.length-1;i>high-1;i--)
{
L.base[i+1]=L.base[i];
}
L.base[high+1]=e;
L.length++;
}
}
void print(SqList L)
{
int i;
for(i=0;i<L.length;i++)
cout<<" "<<L.base[i];
cout<<endl;
}
int main()
{
SqList list;
InitSqList(list);
create(list);
search(list,6);
print(list);
return 0;
}