python-常见的几种算法
冒泡排序 重复遍历要排序的数据,一次比较两个元素,如果他们的顺序错误就交换
比较相邻的元素
list1=[6,7,8,3,5,9,4] # 获得总共有多少数据 len1=len(list1) print(len1) # 循环 第一个循环控制循环总共循环的次数 for i in range(1,len1): # 第二次循环 for j in range(1,len1-i+1): # 判断 第一个数大于第二个数 if list1[j-1]>list1[j]: list1[j-1],list1[j]=list1[j],list1[j-1] print(list1)
7
[3, 4, 5, 6, 7, 8, 9]
选择排序
list1=[2,4,1,5,3,7,6,8] max_index=0 # 循环 for i in range(0,len(list1)-1): # i+1 是取到了最大值 for j in range(i+1,len(list1)): if list1[j]>list1[max_index]: max_index=j list1[i],list1[max_index]=list1[max_index],list1[i] max_index=i+1 print(list1)
[8, 6, 7, 3, 5, 4, 2, 1]
递归 在函数内部直接或间接的调用自身的算法
递归要有出口,没有出口会死循环
递归的特点:函数内部自己调用自己
方法栈 先今后出
通俗理解:
1、我们使用的词典,本身就是递归,为了解释一个词,需要使用更多的词。当你查一个词,发现这个词的解释中某个词仍然不懂,于是你开始查这第二个词,可惜,第二个词里仍然有不懂的词,于是查第三个词,这样查下去,直到有一个词的解释是你完全能看懂的,那么递归走到了尽头,然后你开始后退,逐个明白之前查过的每一个词,最终,你明白了最开始那个词的意思。
2、一个小朋友坐在第10排,他的作业本被小组长扔到了第1排,小朋友要拿回他的作业本,可以怎么办?他可以拍拍第9排小朋友,说:“帮我拿第1排的本子”,而第9排的小朋友可以拍拍第8排小朋友,说:“帮我拿第1排的本子”...如此下去,消息终于传到了第1排小朋友那里,于是他把本子递给第2排,第2排又递给第3排...终于,本子到手啦!这就是递归,拍拍小朋友的背可以类比函数调用,而小朋友们都记得要传消息、送本子,是因为他们有记忆力,这可以类比栈。
3、 一个洋葱是一个带着一层洋葱皮的洋葱。
# 1,1,2,3,5,8,13,21,34,55,试判断数列第十五个数是哪个? def fabonacci(n): ''' n为斐波那契数列 ''' if n <= 2: ''' 数列前两个数都是1 ''' v = 1 return v # 返回结果,并结束函数 v = fabonacci(n-1)+fabonacci(n-2) # 由数据的规律可知,第三个数的结果都是前两个数之和,所以进行递归叠加 print(v) return v # 返回结果,并结束函数 print(fabonacci(15)) # 610 调用函数并打印结果
def sum_number(num): if num==1: return 1 tem=sum_number(num-1) return tem+num
a=sum_number(100) print(a)
5050