各种算法的Python写法(更新ing)

冒泡排序

def sort_mao(arr):
	'''冒泡排序(从高到低)'''
	for i in range(0,len(arr)-1):
		for j in range(0,len(arr)-i-1):
			if arr[j]>arr[j+1]:
				arr[j],arr[j+1] = arr[j+1],arr[j]

选择排序

def sort_xuan(arr):
	'''选择排序'''
	for i in range(0,len(arr)-1):
		min = arr[i]
		min_where = i
		for j in range(i+1,len(arr)):
			if arr[j] < min:
				min = arr[j]
				min_where = j
		arr[i],arr[min_where] = arr[min_where],arr[i]

二分查找

1).不用递归的方法

def search_no(arr,aim):
	'''非递归的二分查找'''
	start=0
	end=len(arr)
	while start<=end:
		#这里的(start+end)/2要用int限定,否则自动为float型,会报错哦
		mid=int((start+end)/2)
		if(arr[mid] == aim):
			return mid
		elif(arr[mid]>aim):
			end = mid-1
			continue
		else:
			start = mid+1
			continue
	return False #如果start>end说明没找到,就返回False

2).用递归的方法

特别注意:在python中函数调用函数的时候,被调用的函数前面要加return,否则只会返回None,python中的递归过程参考:python 递归函数返回值

def search_yes(arr,aim,start,end):
	'''递归的二分查找'''
	mid = int((start+end)/2)
	if(start>end):
		return -1
	elif(arr[mid]==aim):
		return mid
	elif(arr[mid]>aim):
		#此处必须写return 否则总会返回None(血的教训o(╥﹏╥)o)
		return search_yes(arr,aim,start,mid-1)
	else:
		return search_yes(arr,aim,mid+1,end)
发布了38 篇原创文章 · 获赞 4 · 访问量 1660

猜你喜欢

转载自blog.csdn.net/qq_15989473/article/details/103214289
今日推荐