二分查找算法
来源:互联网 发布:两小无猜网络剧是bl吗 编辑:程序博客网 时间:2024/06/07 13:16
二分查找算法是在有序数组中用到的较为频繁的一种算法,在未接触二分查找算法时,最通用的一种做法是,对数组进行遍历,跟每个元素进行比较,其时间为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进行比较。
// binary_search.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <iostream>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 = low+1;}}return -1;//没有找到}int _tmain(int argc, _TCHAR* argv[]){const int LEN = 10000;int a[LEN];//给数组赋值for(int i = 0; i < LEN; i++){a[i] = i-5000;}////打印数组//for(int i = 0; i < LEN; i++)//{//if(i%100 == 0)//std::cout<<std::endl;//std::cout<<a[i]<<" ";//}int goal = 0;int index = binary_search(a,LEN,goal);//返回目标位置if(index != -1){std::cout<<goal<<"在数组中的位置为:"<<index<<std::endl;}elsestd::cout<<"不存在"<<goal<<std::endl;return 0;}
注:转载源地址
- 查找算法 二分查找
- 查找算法:二分查找
- 算法--查找--二分查找
- 查找算法---二分查找
- [算法]二分查找算法
- 算法----二分查找算法
- 查找算法:二分查找算法
- [转载]查找算法----二分查找
- 查找算法之二分查找
- 查找算法之二分查找
- 查找算法_二分查找
- 算法 二分查找(折半查找)
- 查找算法之二分查找
- 查找算法之二分查找
- 查找算法之二分查找
- 查找算法之二分查找
- 查找算法之二分查找
- 查找算法之二分查找
- Real-Time Control Systems Library –– Software and Documentation
- FragmentPagerAdapter.notifyDataSetChanged() 并不能更新其 Fragment
- uva 111 History Grading(动态规划——最长公共子序列)
- libcurl使用教程
- win7
- 二分查找算法
- 【介绍cpu是什么及其主要功能】
- JS的dom对象获取求指点..
- CentOS下matplotlib的安装中图形显示问题
- javaMail应用
- No space left on device /tmp 原因和解决方法
- 使用libtool碰到的问题
- IDispatch接口原理与应用
- Android 更换 RatingBar背景图片