数据结构算法—递归实现折半查找算法
算法思想:
折半查找 适用于 有序表。 这个难度不大,注释也没写多少,有疑问私信我就行!
有序表的存储结构
typedef struct{
int a[30];
int length;
}sqtable;
有序表的创建
sqtable st;
int b=0;
void createst(int k){
int i;
printf("Please input data:");
st.a[0]=-100; // 哨兵。
for (i=1;(!b&&(i<=k));i++){
scanf("%d",&(st.a[i]));
if (st.a[i]<st.a[i-1]){ // 顺序输错,就程序结束,报错。是一个异常处理。不然以后没办法查找了。
printf("Input data error.\n");
b=1;
}
}
if (!b){
st.length=k;
printf("The table is builted.\n");
}
}
完整代码:
#include<stdio.h>
typedef struct{
int a[30];
int length;
}sqtable;
sqtable st;
int b=0;
void createst(int k){
int i;
printf("Please input data:");
st.a[0]=-100;
for (i=1;(!b&&(i<=k));i++){
scanf("%d",&(st.a[i]));
if (st.a[i]<st.a[i-1]){
printf("Input data error.\n");
b=1;
}
}
if (!b){
st.length=k;
printf("The table is builted.\n");
}
}
int Search_Bin(sqtable st,int key,int low,int high){
int mid;
if(low>high){
return -1;
}
else {
mid = (low+high)/2;
if(st.a[mid]==key)
return mid;
if(st.a[mid]<key)
return Search_Bin(st,key,mid+1,high);
if(st.a[mid]>key)
return Search_Bin(st,key,low,mid-1);
}
}
int main(){
int n,x,result;
printf("Please input n:");//序列长度
scanf("%d",&n);
createst(n);
if (b==0) {
printf("Please input you want find value:");
scanf("%d",&x);
result = Search_Bin(st,x,1,st.length);
if(result == -1)
printf("未找到!");
else{
printf("找到查找的元素:%d",result);
}
}
}