• #查找算法#【1】简单查找:顺序、折半查找


    •顺序查找

      从线性表的一端开始,依次将每个记录的关键字与给定值进行比较,若某个记录的关键字等于给定值,表示查找成功,返回记录序号;若将线性表中所有记录都比较完,仍未找到关键字与给定值相等的记录,则表示查找失败,返回一个失败值。

    •折半查找

      又称为二分查找。这种查找方法要求查找表的数据是线性结构保存,并且还要求查找表中的数据是按关键字由小到大有序排列。

    顺序查找比较简单,依次用数组中的每个元素和要查找的元素进行对比即可。不再贴代码说明

    折半查找是一种递归过程,每折半一次,可使查找范围缩小一半,当查找范围缩小到只剩一个元素,而该元素还不是要找的元素,则查找失败。

    折半查找说明如下图:

      

    折半查找代码如下:

     1 #include <stdio.h>
     2 #define LENGTH 10
     3 int source[LENGTH] = {10,12,28,37,54,65,69,86,90,98};
     4 
     5 //二分查找,查找key在原始数据a中的位置
     6 int BinarySearch(int a[],int n,int key){
     7     int low,high,mid;
     8 
     9     low = 0;
    10     high = n-1;
    11 
    12     while(low<=high){
    13         mid = (low + high)/2;    //每次让中间数取最小和最大的中间
    14         if(a[mid] == key)    //查找的元素正好等于中间值
    15             return mid;
    16         else if(key < a[mid])    //查找的元素小于中间值,在最小值和上次中间值范围内查找
    17             high = mid - 1;
    18         else
    19             low = mid + 1;    //查找的元素大于中间值,在中间值和最大值范围查找
    20     }
    21 
    22     return -1;
    23 }
    24 
    25 int main(){
    26     int i,key,pos;
    27     printf("原始数据:
    ");
    28     
    29     for(i = 0 ; i < LENGTH ; i++)
    30         printf("%d ",source[i]);
    31 
    32     printf("
    请输入要查找的数据:");
    33     scanf("%d",&key);
    34 
    35     pos = BinarySearch(source,LENGTH,key);
    36     
    37     if(pos > -1)
    38         printf("
    查找成功,查找元素位于第 %d 个",pos);
    39     else
    40         printf("
    查找失败");
    41 
    42 }

      

  • 相关阅读:
    【监控笔记】【1.5】事件通知(event Notification)
    【监控笔记】【1.4】Pssdiag和Sqldiag管理器
    【监控笔记】【1.3】监控事件系列——SQL Trace(黑盒跟踪 BlackBox Trace)
    sqlserver数据库大型应用解决方案总结
    如何学习MySQL数据库管理员(OCP)认证(转)
    PL/SQL基本操作
    OracleOraDb11g_home1TNSListener服务无法启动
    sqlplus无法登陆?
    SQL Server中的扩展事件学习系列
    docker容器的服务发现:consul
  • 原文地址:https://www.cnblogs.com/fanchangfa/p/3861439.html
Copyright © 2020-2023  润新知