今天在知乎上看了一个关于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\n",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,\n",i); }else { printf("没有找到数据"); } return 0; }
其时间复杂度为O(logn)