zoukankan      html  css  js  c++  java
  • 折半查找

    今天在知乎上看了一个关于iOS面试题的一个问题,里面有一个题目如下:

    什么是Binary Search,其时间复杂度是多少呢?

    先介绍一下概念吧:

    折半查找(Binary Search):又称二分查找。他的前提是线性表的记录 必须有序。

    直接看代码:

    #include<stdio.h>
    //a[]是要查找的顺序表,n是表的长度,found是要查找的数据 
    int BinarySearch(int a[],int n,int found) 
    {
        //------------------------------这里最好先判断一下数组是不是为空 
        int low = 0;
        int high = n-1;
        int mid;
        while(low<=high) {
            mid = (low+high)/2;
    //        printf("-------------%d
    ",mid);
            if(found==a[mid]) {
                return mid;
            }else if(found<a[mid]) {
                high = mid-1;
            }else {
                low = mid+1;
            }
        } 
        
         return -1;
    }
    int main()
    {
        int found;
        int a[] = {0,1,16,24,35,47,59,62,73,88};
        int i=BinarySearch(a,10,88);
        if(i!=-1) {
            printf("在数组中的位置是:%d,
    ",i);
        }else
        {
            printf("没有找到数据");
        }
        return 0;
    } 

     其时间复杂度为O(logn)

  • 相关阅读:
    hdu 1005(找循环节)
    hdu 1452(因子和+逆元)
    hdu 1215(因子和)
    hdu 1492(约数的个数)
    hdu 2136(质数筛选+整数分解)
    HDU 1286 找新朋友
    HDU 2136 Largest prime factor
    HDU 1722 Cake
    HDU 1713 相遇周期
    HDU 2138 How many prime numbers
  • 原文地址:https://www.cnblogs.com/zhanggui/p/4786614.html
Copyright © 2011-2022 走看看