您的位置:首页 > 理论基础 > 数据结构算法

数据结构基础算法整理归纳:二分查找算法(一)

2018-02-18 23:00 567 查看
如今,对于学生来说,面试各大公司,免不了要考察对于数据结构的基础算法的掌握情况。由于自己的学习时间过长,对于这些基础算法的掌握有些遗忘,面试的时候碰了一鼻子的灰,加之学习算法的时候使用C语言学习,为何适应自己所熟悉的语法,故在此总结一下常用的算法思路,并使用JAVA和Python实现基础算法,并运行调通。
一、二分查找算法。
二分查找(折半查找)算法的基本思路如下:首先,假设表中元素是按升序排列,将表中间位置的值与查找关键字比较,如果两者值相等,则查找成功;否则利用中间位置的索引将表分成前、后两个子表,如果中间位置的值大于查找关键字,则进一步查找前半边的子表,否则进一步查找后半边的子表。重复以上过程,直到找到满足条件的索引,使查找成功,返回索引,或直到子表不存在为止,此时查找不成功,返回0。JAVA 代码如下:int ef(int key,int [] a) {

int high=a.length;

int low=0;

int num=0;

int mid=0;

while(a.length!=0) {

mid=(high+low)/2;

if (a[mid]==key){

num=mid;

return num;}

if(key<a[mid]) {

high=(high+low)/2;}

if(key>a[mid]) {

low=(high+low)/2;}}

return 0;}

        Python 代码如下:def ef(arry, num):

low = 0 # 最小数下标
high = len(arry) - 1 # 最大数下标
while len(arry)!=0:
mid = int((low + high) / 2 ) # 中间数下标
if arry[mid] == num: # 如果中间数下标等于num, 返回
return mid
elif num< arry[mid]: # 如果num在中间数左边, 移动high下标
high = mid - 1
else: # 如果num在中间数右边, 移动low下标
low = mid + 1
return None# num不存在, 返回None
rs = ef(list(range(1, 10)), 8)
print(rs)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二分查找 Python Java