zoukankan      html  css  js  c++  java
  • 算法笔记之二分查找

    对于学习算法或者做一些查找题的同学来说刚开始都喜欢从头开始做遍历,这种算法的时间复杂度为O(N),这是一个普适性的算法,几乎所有的查找都可以用它,而且时间复杂不高在我们能够接受的范围之内。但我下面介绍的是另外一个特殊的算法,它不具备普适性,它只适合查找那些已经排好序的元素并且查找的数据元素量很庞大,这种情况下用二分查找将在时间效率方面体现巨大优势,因为它的时间复杂度为O(logN),而且很多学校程序语言期末考试大题都会考到,所以建议还是及早的牢固掌握它。

    代码:

     # include<stdio.h>

     #define MAX_N 100


     int binary_search(int *arr,int n,int x){
     int head= 0,tail= n-1,mid;//head,tail,和mid分别指向要查找数组的第一个,最后一个和中间元素
     while(head <= tail){
     mid=(head + tail)>> 1;//此时mid指向待查找数组的中间元素
     if(arr[mid]== x) return mid;//如果arr[mid]== x 返回数组下标
     if(arr[mid]< x) head= mid + 1;//如果arr[mid]< x将head替换成mid后面+ 1的那个元素
     else tail = mid - 1;//如果arr[mid]> x将head替换成mid前面-1的那个元素
     }
     return -1;
     }
     int main(){
     int arr[MAX_N + 5],n,x;
     scanf("%d",&n);//刚开始读入要输入元素的个数
     for(int i = 0;i < n; i++){
     scanf("%d",&arr[i]);//循环读入数组元素
     }
     while(~scanf("%d",&x)){
     printf("%d ",binary_search(arr,n,x));//查到返回下标值否则到返回-1
     }
     return 0;
     }

                                                                  

  • 相关阅读:
    正确率、召回率和 F 值
    柯西序列 转自http://blog.sina.com.cn/coopld
    web用户非正常退出的问题
    uploadify上传的文件
    10270 : 青蛙的游戏
    10117 : 数独游戏
    10101 : 正面交锋
    10049 : 凯的菱形
    DARE YOU CLICK ME???(你敢点我吗???)
    高精度专辑(1码题库)
  • 原文地址:https://www.cnblogs.com/liyaning/p/14604328.html
Copyright © 2011-2022 走看看