近几天学习的算法:冒泡排序、选择排序、二分法(查找以及解方程)以及汉诺塔
2022-04-18 07:03阅读:
对于最简单的排序算法,虽然大概知晓其基本原理,但畏难心理使得自己一直没能清晰明白搞懂具体的算法,以及冒泡和选择排序的区别。这两天我硬着头皮去逐句理解程序代码,并且用实际数据模拟推演了一遍,基本搞清楚了其算法流程。
冒泡法:首先外层循环i是比较次数,从高到底,一开始两两比较的次数多,越往后越少。内循环j就是从外循环i值之后的一个数开始,一直到结束n
def maopao(a):
n=len(a)
for i in range(n-1,0,-1):
for j in range(i+1,n):
if a[j]>a[j+1]:
a[j],a[j+1]=a[j+1],a[j]
alist=[1,4,3,5,7,6,8,2,9,0]
maopao(alist)
print(alist)
排序法:每次假设未排序的数列中第一个数为最小值,然后将后面的数值依次和最小值比较,如果有数值比最小值小,就交换,将后面的这个小的数值和最小值交换。
def paixu(a):
n=len(a)
for i in range(n-1):
amin=i
for j in range(i+1,n):
if a[j]
amin=j ### 此处不能弄反
if i!=amin:
a[amin],a[i]=a[i],a[amin]
alist=[1,4,3,5,7,6,8,2,9,0]
paixu(alist)
print(alist)
二分法:
【猜数字次数,教材内容】
a=int(input('请输入一个数:'))
step=0
flag1=1
flag2=1000
while flag1<=flag2:
mid=(flag1+flag2)//2
step+=1
if a>mid:
def maopao(a):
if a[j]>a[j+1]:
a[j],a[j+1]=a[j+1],a[j]
alist=[1,4,3,5,7,6,8,2,9,0]
maopao(alist)
print(alist)
排序法:每次假设未排序的数列中第一个数为最小值,然后将后面的数值依次和最小值比较,如果有数值比最小值小,就交换,将后面的这个小的数值和最小值交换。
def paixu(a):
n=len(a)
for i in range(n-1):
amin=i
for j in range(i+1,n):
if a[j]
amin=j
if i!=amin:
a[amin],a[i]=a[i],a[amin]
alist=[1,4,3,5,7,6,8,2,9,0]
paixu(alist)
print(alist)
二分法:
【猜数字次数,教材内容】
a=int(input('请输入一个数:'))
step=0
flag1=1
flag2=1000
while flag1<=flag2:
