//请写出对有序表进行折半查找的非递归算法,并将对应的程序调试运行通过
#include<stdio.h>
#include<stdlib.h>
#define N 100
typedef int Status;
typedef int ElemType;
typedef struct {//创建有序表
ElemType *list;
int length;
}SqList;
Status Creat_SearchTable(SqList &st){//创建查找表
ElemType a[N];
printf("请输入您要输入的数据总数:(不大于100)");
scanf("%d",&st.length);
st.list=(ElemType*)malloc(st.length*sizeof(ElemType));
if(!st.list)
exit(-1);
for(int i=0;i<st.length;i++){
printf("请输入第%d个数据",i+1);
scanf("%d",&a[i]);
}
int j,k,t,p;
for(j=0;j<st.length-1;j++){//选择法对数据进行排序
p=j;
for(k=j;k<st.length;k++){
if(a[k]<a[p])
p=k;
t=a[p];a[p]=a[j];a[j]=t;
}
}
for(int i=0;i<st.length;i++){//把已经排好序的数据放入表中
st.list[i]=a[i];
}
}
Status Binary_Search(SqList st,ElemType key){//非递归的折半查找
int low,mid,high;
low=0;high=st.length-1;
while(low<=high){
mid=(low+high)/2;
if(key==st.list[mid])
return mid;
else if(key<st.list[mid])
high=mid-1;
else
low=mid+1;
}
return 0;
}
Status Binary_Search_recur(SqList st,int low,int high,ElemType key){
//递归的折半查找
int mid=(low+high)/2;
if(low>high)
return 0;
if(key==st.list[mid])
return mid;
else if(key<st.list[mid])
Binary_Search_recur(st,low,mid-1,key);
else
Binary_Search_recur(st,mid+1,high,key);
}
int main(){
ElemType key;
int flag,p=0;
SqList st;
if(!Creat_SearchTable(st))
return 0;
printf("请输入您要查找的数据:");
scanf("%d",&key);
while(!p){
printf("请选择您想使用的折半查找方式,“1”代表非递归的折半查找方式,“2”表示递归的折半查找方式。“0”表示退出");
scanf("%d",&flag);
if(flag==0||flag==1||flag==2)p=1;
}
if(flag=1){
if(!Binary_Search(st,key))
printf("您要查找的数据不存在");
else
printf("值为%d的数据在表中",key);
}
if(flag=2){
if(!Binary_Search_recur(st,0,st.length,key))
printf("您要查找的数据不存在");
else
printf("值为%d的数据在表中",key);
}
system("pause");
return 0;
}
对有序表进行折半查找的非递归算法
原文作者:查找算法
原文地址: https://blog.csdn.net/peerless1024/article/details/68067286
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/peerless1024/article/details/68067286
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。