#include<stdio.h>
#define MAX 100
typedef struct
{
int elem[MAX+1];
int length;
}Stable;
void creat_seq(Stable *list);
int sort_seq(Stable *list);
int bin_search(Stable *list,int k,int low,int high);
void main()
{
Stable *list,table;
int i,key;
list=&table;
printf("请输入线性表的长度:");
scanf("%d",&list->length);
creat_seq(list);
sort_seq(list);
printf("\n请输入查找的值:");
for(i=1;i<=list->length;i++)
printf("list.elem[%d].key=%d\n",i,list->elem[i]);
printf("\n:");
scanf("%d",&key);
bin_search(list,key,1,list->length);
}
void creat_seq(Stable *list)
{
int i;
printf("请输入顺序表的内容:\n");
for(i=1;i<=list->length;i++)
{
printf("list.elem[%d].key=",i);
scanf("%d",&list->elem[i]);
}
}
int sort_seq(Stable *list)
{
int i,j,flag;
for(i=1;i<=list->length;i++)
{
flag=0;
for(j=1;j<list->length-i+1;j++)
if(list->elem[j]>list->elem[j+1])
{
list->elem[0]=list->elem[j+1];
list->elem[j+1]=list->elem[j];
list->elem[j]=list->elem[0];
flag=1;
}
if(flag==0)return 1;
}
}
int bin_search(Stable *list,int k,int low,int high)
{
int mid;
if(low>high)
{
printf("没有找到要查找的值\n");
return (0);
}
mid=(low+high)/2;
if(list->elem[mid]==k)
{
printf("查找成功\n");
printf("list[%d]=%d\n",mid,k);
return (mid);
}
else
if(list->elem[mid]<k)
return(bin_search(list,k,mid+1,high));
else
return(bin_search(list,k,low,mid-1));
}
#define MAX 100
typedef struct
{
int elem[MAX+1];
int length;
}Stable;
void creat_seq(Stable *list);
int sort_seq(Stable *list);
int bin_search(Stable *list,int k,int low,int high);
void main()
{
Stable *list,table;
int i,key;
list=&table;
printf("请输入线性表的长度:");
scanf("%d",&list->length);
creat_seq(list);
sort_seq(list);
printf("\n请输入查找的值:");
for(i=1;i<=list->length;i++)
printf("list.elem[%d].key=%d\n",i,list->elem[i]);
printf("\n:");
scanf("%d",&key);
bin_search(list,key,1,list->length);
}
void creat_seq(Stable *list)
{
int i;
printf("请输入顺序表的内容:\n");
for(i=1;i<=list->length;i++)
{
printf("list.elem[%d].key=",i);
scanf("%d",&list->elem[i]);
}
}
int sort_seq(Stable *list)
{
int i,j,flag;
for(i=1;i<=list->length;i++)
{
flag=0;
for(j=1;j<list->length-i+1;j++)
if(list->elem[j]>list->elem[j+1])
{
list->elem[0]=list->elem[j+1];
list->elem[j+1]=list->elem[j];
list->elem[j]=list->elem[0];
flag=1;
}
if(flag==0)return 1;
}
}
int bin_search(Stable *list,int k,int low,int high)
{
int mid;
if(low>high)
{
printf("没有找到要查找的值\n");
return (0);
}
mid=(low+high)/2;
if(list->elem[mid]==k)
{
printf("查找成功\n");
printf("list[%d]=%d\n",mid,k);
return (mid);
}
else
if(list->elem[mid]<k)
return(bin_search(list,k,mid+1,high));
else
return(bin_search(list,k,low,mid-1));
}