zoukankan      html  css  js  c++  java
  • C语言查找算法之顺序查找、二分查找(折半查找)

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

    1. 顺序查找
      /*顺序查找 
      顺序查找是在一个已知无(或有序)序队列中找出与给定关键字相同的数的具体位置。
      原理是让关键字与队列中的数从最后一个开始(或第一个)逐个比较,直到找出与给定关键字相同的数为止
      它的缺点是效率低下
      */ #include<stdio.h> void main(){ int i ,num,arr[10]={3,6,9,10,65,23,76,45,2,11}; int size = sizeof(arr)/sizeof(int); printf("请输入要查询的值:"); scanf("%d",&num); for(i=0;i<size;i++){ if(num==arr[i]){ break; } } if(i!=size) printf("要查询的值%d在第%d个位置",num,i+1); else printf("未找到值%d",num); getch(); }
    2. 二分查找
      /*二分查找 
      二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。
      但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
      */
      #include<stdio.h>
      void main(){
          int mid,low,high,num,arr[10]={3,6,9,10,23,65,76,87,88,213};
          int size = sizeof(arr)/sizeof(int);
          printf("请输入要查询的值:"); 
          scanf("%d",&num);
          low = 0;
          high = size;//初始low和high的值
          while(low<=high){
              mid = (low+high)/2;//取中值 
              if(arr[mid]==num) break;//找到,结束循环此时low<=high 
              else if(arr[mid] < num) low = mid+1;//如果目标值比当前中间值大,说明目标值在中间值的后面low移动到mid+1 
              else high = mid - 1;
          }
          if(low <= high)//找到,输出 
              printf("要查询的值%d在第%d个位置",num,mid+1);
          else //未找到 
              printf("未找到值%d",num);
          
          getch();
      } 
  • 相关阅读:
    倍增算法2(树上倍增)
    倍增算法1
    可持久线段树
    【BZOJ】1059: [ZJOI2007]矩阵游戏(二分图匹配)
    【BZOJ】2743: [HEOI2012]采花(树状数组)
    【BZOJ】2959: 长跑(lct+缩点)(暂时弃坑)
    【学习笔记】LCT link cut tree
    【学习笔记】FFT
    【BZOJ】1001: [BeiJing2006]狼抓兔子(最小割 / 对偶图)
    【BZOJ】1007: [HNOI2008]水平可见直线(凸包)
  • 原文地址:https://www.cnblogs.com/hyyq/p/8296387.html
Copyright © 2011-2022 走看看