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;
     }

                                                                  

  • 相关阅读:
    将文件导入到SQL server数据库表中的字段中
    查看端口是否启用
    JS去除字符串左右两端的空格
    css常见问题
    iframe之局部刷新
    iframe局部刷新的二种实现方法
    模式识别复习目录
    linux下文件内容查找 转
    LaTeX技巧10:LaTeX数学公式输入初级入门
    matlab中高维数组怎么做PCA?
  • 原文地址:https://www.cnblogs.com/liyaning/p/14604328.html
Copyright © 2011-2022 走看看