C语言查找算法之顺序查找、二分查找(折半查找)

时间:2021-11-24 15:09:19

  C语言查找算法之顺序查找、二分查找(折半查找),最近考试要用到,网上也有很多例子,我觉得还是自己写的看得懂一些。

  1. 顺序查找
    /*顺序查找
    顺序查找是在一个已知无(或有序)序队列中找出与给定关键字相同的数的具体位置。
    原理是让关键字与队列中的数从最后一个开始(或第一个)逐个比较,直到找出与给定关键字相同的数为止
    它的缺点是效率低下
    */
    #include<stdio.h>
    void main(){
    int i ,num,arr[]={,,,,,,,,,};
    int size = sizeof(arr)/sizeof(int);
    printf("请输入要查询的值:");
    scanf("%d",&num);
    for(i=;i<size;i++){
    if(num==arr[i]){
    break;
    }
    }
    if(i!=size)
    printf("要查询的值%d在第%d个位置",num,i+);
    else
    printf("未找到值%d",num); getch();
    }
  2. 二分查找
    /*二分查找
    二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。
    但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
    */
    #include<stdio.h>
    void main(){
    int mid,low,high,num,arr[]={,,,,,,,,,};
    int size = sizeof(arr)/sizeof(int);
    printf("请输入要查询的值:");
    scanf("%d",&num);
    low = ;
    high = size;//初始low和high的值
    while(low<=high){
    mid = (low+high)/;//取中值
    if(arr[mid]==num) break;//找到,结束循环此时low<=high
    else if(arr[mid] < num) low = mid+;//如果目标值比当前中间值大,说明目标值在中间值的后面low移动到mid+1
    else high = mid - ;
    }
    if(low <= high)//找到,输出
    printf("要查询的值%d在第%d个位置",num,mid+);
    else //未找到
    printf("未找到值%d",num); getch();
    }