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