二分法在有序数组中查找一个数

算法思想:
首先条件为有序数组,先查找中间下标的元素:
(1)如果该元素等于7,则返回中间下标,查找结束;
(2)如果该元素大于7,则7必然在中间元素的右边部分,则缩小范围,在右半部分查找7,再计算右半部分的中间下标,转到(1)
(3)如果该元素下于7,则7必然在中间元素的左半部分,则缩小范围,在左半部分查找7,再计算左半部分的中间下标,转到(1)

优点:
对于已排好序的大数组起到效率很高地查询作用。

时间复杂度:
查找数据长度为N,每次查找后减半,
第1次 N/2 … 第k次 N/2^k,最坏的情况下第k次才找到,此时只剩一个数据,长度为1。
即 N/2^k = 1,查找次数 k=log2(N)。
时间复杂度为:log N

时间复杂度大小排序:O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n)

法一:

#include
#define N 9

/*
int main()
{
        static int a[N] = {1,2,3,4,5,6,7,8,9}; //程序在编译运行的时候,普通变>量存放在栈区,static

你可能感兴趣的:(数据结构与算法)