对有序表进行折半查找的非递归算法

//请写出对有序表进行折半查找的非递归算法,并将对应的程序调试运行通过
#include
#include
#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;iprintf("请输入第%d个数据",i+1);
        scanf("%d",&a[i]);
    }
    int j,k,t,p;
    for(j=0;j1;j++){//选择法对数据进行排序
        p=j;
        for(k=j;kif(a[k]for(int i=0;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(keylist[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(keylist[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;
}

你可能感兴趣的:(c语言)