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    
posted on 2021-12-22 14:43  xxxxaaa  阅读(98)  评论(0编辑  收藏  举报