数据结构顺序查找和折半查找

1.代码

#include<stdio.h>
#include<stdlib.h>
#define MAXNUM 100

typedef struct{
    int *elem; //查找表的数据结构(顺序表)
    int TableLen; //表的长度 
}SSTable;

//初始化
void InitList(SSTable &ST){
    int i,n;
    ST.elem=(int *)malloc(MAXNUM*sizeof(int));
    printf("请输入元素个数:");
    scanf("%d",&n);
    printf("请输入各元素的值:");
    for(i=1;i<=n;i++){
        scanf("%d",&ST.elem[i]);
    }
    ST.TableLen=n;
}


//顺序查找
int Search_Seq(SSTable ST,int key){
    int i;
    for(i=0;i<ST.TableLen && ST.elem[i]!=key;i++);
    //查找成功,则返回元素下标;查找失败,则返回-1
    return i==ST.TableLen ? -1 : i; 
} 

//折半查找
int Binary_Search(SSTable L,int key){
    int low=0,high=L.TableLen-1,mid;
    while(low<=high){
        mid=(low+high)/2; //取中间位置
        if(L.elem[mid]==key)
            return mid; //查找成功则返回元素所在位置
        else if(L.elem[mid]>key)
            high=mid-1; //从前半部分继续查找
        else
            low=mid+1; //从后半部分继续查找        
    }
    return -1; //查找失败,返回-1 
} 

int main(){
    int key;
    SSTable ST;
    InitList(ST);
    printf("请输入要查找元素的值:");
    scanf("%d",&key);
    printf("顺序查找的元素所在位置:%d\n", Search_Seq(ST,key));
    printf("折半查找的元素所在位置:%d\n", Binary_Search(ST,key));
    return 0;
     
}

 

2.运行结果

 

posted @ 2021-12-21 11:15  不会飞的鲨鱼  阅读(179)  评论(0编辑  收藏  举报