```#include
#define Max 256
typedef struct Keylist
{
int key[Max];
int len;
}Keylist;
void creatKlist(Keylist L)
{
int i=0;
printf("**建立靜態表**\n");
printf("你需要構建多少個數據,請輸入:");
scanf("%d",&L.len);
printf("\n");
for(i=0;i<L.len;i++)
{
printf("請輸入100以內的數據\n");
scanf("%d",&L.key[i]);
}
}
Keylist sort(Keylist L)
{
int i,t;
for(i=0;i
{
if(L.key[i]>L.key[i+1])
{
t=L.key[i];
L.key[i+1]=L.key[i];
L.key[i]=t;
}
}
return L;
}
int Seqsearch(Keylist L,int k)
{
int i;
for(i=L.len;L.key[i]!=k;i--)
return i;
}
int *Binsearch(Keylist L,int k)
{
int high=L.len,low=1,mid;
int a[1];
while(low<=high)
{
mid=(low+high)/2;
if(L.key[mid]==k)
{
a[0]=mid;
return a;
}
else if(L.key[mid]<k)
{
low=mid+1;
a[1]++;
}
else
{
high=mid-1;
a[1]++;
}
}
return a;
}
void main()
{
Keylist L;
int a[1];
creatKlist(L);
int k,i,choice;
printf("請輸入你想要執行的操作序號:\n");
printf("1.順序查找\n2.折半查找\n");
scanf("%d",&choice);
switch(choice)
{
printf("請輸入關鍵碼:\n");
scanf("%d,&k");
case'1':
i=Seqsearch(L,k);
printf("順序查找只有一次\n");
if(i!=0)
printf("關鍵碼的位置是第%d個",i);
if("i=0")
printf("關鍵碼不存在!");
break;
case'2':
a=Binsearch(L,k);
printf("折半查找位置在%d\n",a[0]);
printf("總共找了%d次\n",a[1]);
break;
default:
printf("輸入錯誤!結束進程!");
break;
}
return ;
}
#include
#define Max 256
typedef struct Keylist
{
int key[Max];
int len;
}Keylist;
//void creatKlist( Keylist L)
void creatKlist( Keylist* L)
{
int i=0;
printf("**建立靜態表**\n");
printf("你需要構建多少個數據,請輸入:");
scanf("%d",&L->len);
printf("\n");
for(i=0;ilen;i++)
{
printf("請輸入100以內的數據\n");
scanf("%d",&L->key[i]);
}
}
//這個函數如果是想用來排序,顯然是不對的哦
Keylist sort(Keylist L)
{
int i,t;
//for(i=0;i {
for(i=0;i < L.len; ++i )
{
if(L.key[i]>L.key[i+1])
{
t=L.key[i];
L.key[i+1]=L.key[i];
L.key[i]=t;
}
}
return L;
}
//int Seqsearch(Keylist L,int k)
int Seqsearch(Keylist* L,int k)
{
// int i;
// for(i=L->len;L->key[i]!=k;i--)
// return i;
int i;
for(i=L->len-1;L->key[i]!=k && i >= 0;i--)
;
return i;
}
//int Binsearch(Keylist L,int k)
int *Binsearch(Keylist L,int k)
{
//int high=L->len,low=1,mid;
int high = L->len-1,low=0,mid;
//int a[1];
int* a = new int[2];
a[0] = 0;
a[1] = 0;
while(low<=high)
{
mid=(low+high)/2;
if(L->key[mid]==k)
{
a[0]=mid;
return a;
}
else if(L->key[mid]<k)
{
low=mid+1;
a[1]++;
}
else
{
high=mid-1;
a[1]++;
}
}
return a;
}
void main()
{
Keylist L;
//int a[1];
int* a = NULL;
//creatKlist( L );
creatKlist( &L );
int k,i,choice;
printf("請輸入你想要執行的操作序號:\n");
printf("1.順序查找\n2.折半查找\n");
scanf("%d",&choice);
printf("請輸入關鍵碼:\n");
//scanf("%d,&k");
scanf("%d", &k);
switch(choice)
{
// printf("請輸入關鍵碼:\n");
// scanf("%d,&k");
// case'1':
case 1:
//i=Seqsearch(L,k);
i=Seqsearch(&L,k);
printf("順序查找只有一次\n");
//if(i!=0)
if ( i != -1 )
printf("關鍵碼的位置是第%d個",i+1);
//if("i=0")
else
printf("關鍵碼不存在!");
break;
//case'2':
case 2:
//a=Binsearch(L,k);
a=Binsearch(&L,k);
printf("折半查找位置在%d\n",a[0]+1);
printf("總共找了%d次\n",a[1]+1);
break;
default:
printf("輸入錯誤!結束進程!");
break;
}
//釋放內存
if ( NULL != a )
{
delete[] a;
a = NULL;
}
return ;
}