This theme is built with awescnb.|

也曾遇见山海

园龄:2年10个月粉丝:0关注:0

2022-05-06 21:40阅读: 73评论: 0推荐: 0

Python数据结构与算法(1)

一、递归

递归特点:1、调用自己  2、结束条件

代码示例

复制代码
 1 # 先递归后打印,会先打印最底层的数
 2 def func(x):
 3     if x>0:
 4         func(x - 1)
 5         print(x)
 6 func(3)
 7 # 先打印后递归,先打印最外层的数
 8 def func2(x):
 9     if x>0:
10         print(x)
11         func2(x - 1)
12 func2(3)
复制代码

运行截图

1、递归案例——汉诺塔

代码

复制代码
 1 # 假设有n个盘子,把除了底下最大的盘子之外的盘子视为n-1个
 2 # 1、把n-1个盘子从a经过c移动到b
 3 # 2、把第n个盘子从a移动到c
 4 # 3、把n-1个盘子从b经过a移动到c
 5 
 6 # 移动次数递推式 h(x)=2h(x-1)+1
 7 def hanoi(n,a,b,c):
 8     if n>0:
 9         hanoi(n-1,a,c,b)
10         print("move from %s to %s"%(a,c))
11         hanoi(n-1,b,a,c)
12 hanoi(3,'A','B','C')
复制代码

运行截图

 二、顺序(线性)查找

 代码示例

复制代码
 1 # li表示要查找的列表,va表示所要查找的值
 2 # 利用enumerate枚举函数列出列表li的每个元素下标key,值val
 3 # 如果值val与所要查找的值va相等则把下标key加到new_li数组中,没有就返回空数组
 4 def linear_search(li,va):
 5     new_li=[]
 6     for key,val in enumerate(li):
 7         if val==va:
 8             new_li.append(key)
 9     return new_li
10 li=[12,23,34,56,45,67,13,32,13,48]
11 print(linear_search(li,13))
复制代码

运行截图

 三、二分查找

代码

复制代码
 1 def binary_search(li,va):  # li为待查找的列表(已经排好顺序),va为待查找的值
 2     left=0                 # 左边界
 3     right=len(li)-1        # 右边界
 4     while left<=right:     # 候选区有值就循环
 5         mid=(left+right)//2
 6         if li[mid]==va:    # 中间值与待查找的值相等,则直接返回中间值下标
 7             return mid
 8         elif li[mid]>va:   # 中间值比待查找的值大,则把中间值下标减1赋值给右边界
 9             right=mid-1
10         else:              # li[mid]<va 中间值比待查找的值小,则把中间值下标加1赋值给左边界
11             left=mid+1
12     else:
13         return None        # 找不到值返回None
14 li=[1,2,3,4,5,6,7,8,9]
15 print(binary_search(li,3))
复制代码

运行截图

 

本文作者:也曾遇见山海

本文链接:https://www.cnblogs.com/laochai/p/16230574.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   也曾遇见山海  阅读(73)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 Secret 茶太
Secret - 茶太
00:00 / 00:00
An audio error has occurred.

作词 : 茶太

作曲 : Bassy

じゃあねと軽(かる)く手(て)を振(ふ)る 肩越(かたご)しに君(きみ)を見(み)る

改札(かいさつ)吸(す)い込(こ)んだ切符(きっぷ)つまむ 歩(ある)き出(だ)す

今日(きょう)も一日(いちにち)ずっと我慢(がまん)してた

この気持(きも)ち抑(おさ)える自信(じしん)が無(な)い

ほんとはねもっとそばに居(い)て ずっと君(きみ)と一緒(いっしょ)に居(い)たい

でもそんなこと言(い)えないから ため息(いき)混(ま)じりの秘密(ひみつ)

一歩(いっぽ)分(ぶん)近(ちか)づいたなら その分(ぶん)壁(かべ)を作(つく)る

臆病(おくびょう)者(もの)だから 気付(きづ)かないでお願(ねが)いと

この距離(きょり)が居心地(いごこち)良(よ)すぎるから

壊(こわ)れないようにと祈(いの)ってみる

ほんとはねもっとそばに居(い)て 君(きみ)を独(ひと)り占(じ)めしたいんだ

でもそんなこと言(い)えないから ため息(いき)混(ま)じりの秘密(ひみつ)

日(ひ)を追(お)って膨(ふく)らんでく気持(きも)ち

笑顔(えがお)の下(した)隠(かく)しちゃうんだいつも

振(ふ)り向(む)いた先(さき)にいる君(きみ)が 無邪気(むじゃき)に笑(わら)うから愛(いと)しくて

人込(ひとご)みの中(なか)で手(て)を振(ふ)った また明日(あした)ねと笑(わら)いながら

ほんとはもっとそばに居(い)て ずっと君(きみ)と一緒(いっしょ)に居(い)たい

でもそんなこと言(い)えないから ため息(いき)混(ま)じりの秘密(ひみつ)

終わり