欢迎访问ic37.com |
会员登录 免费注册
发布采购

二分查找算法; 二分查找算法是在有序数组中用到的较为频繁的一种算法,在未接触二分查找算法时,最通用的

二分查找算法是在有序数组中用到的较为频繁的一种算法,在未接触二分查找算法时,最通用的一种做法是,对数组进行遍历,跟每个元素进行比较,其时间为O(n).但二分查找算法则更优,因为其查找时间为O(lgn),譬如数组{1, 2, 3, 4, 5, 6, 7, 8, 9},查找元素6,用二分查找的算法执行的话,其顺序为:     1.第一步查找中间元素,即5,由于5<6,则6必然在5之后的数组元素中,那么就在{6, 7, 8, 9}中查找,     2.寻找{6, 7, 8, 9}的中位数,为7,7>6,则6应该在7左边的数组元素中,那么只剩下6,即找到了。     二分查找算法就是不断将数组进行对半分割,每次拿中间元素和goal进行比较。

评论

二分查找算法就是不断将数组进行对半分割,每次拿中间元素和goal进行比较


复制#include <iostream> using namespace std; //二分查找 int binary_search(int* a, int len, int goal); int main() {     const int LEN  = 10000;     int a[LEN];     for(int i = 0; i < LEN; i++)         a[i] = i - 5000;     int goal = 0;     int index = binary_search(a, LEN, goal);     if(index != -1)         cout<<goal<<"在数组中的下标为"<<binary_search(a, LEN, goal)<<endl;     else         cout<<"不存在"<<goal<<endl;     return 0; } int binary_search(int* a, int len, int goal) {     int low = 0;     int high = len - 1;     while(low <= high)     {         int middle = (low + high)/2;         if(a[middle] == goal)             return middle;         //在左半边         else if(a[middle] > goal)             high = middle - 1;         //在右半边         else             low = middle + 1;     }     //没找到     return -1; }
论坛有算法教程的,可以直接搜。
基本的算法,以前有个C语音算法一百例
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。
评论到底啦~
 复制成功!