如今,对于学生来说,面试各大公司,免不了要考察对于数据结构的基础算法的掌握情况。由于自己的学习时间过长,对于这些基础算法的掌握有些遗忘,面试的时候碰了一鼻子的灰,加之学习算法的时候使用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)
