def maopao():#冒泡排序
a=[1,4,5,2,3]
for j in range(0,len(a)-1):
for i in range(0,len(a)-1):
if(a[i]>a[i+1]):
b=a[i]
a[i]=a[i+1]
a[i+1]=b
print(a)
def xuanzhe():#选择排序
a=[1,4,5,2,3]
c=[]
for j in range(0,len(a)):
b=a[0]
for i in range(0,len(a)):
if b<a[i]:
b=a[i]
c.append(b)
a.remove(b)
print(sorted(c))
def yuese(a,m):#约瑟夫环
if len(a)>0:
b=[]
for i in range(1,len(a)+1):#遍历初始列表找出整除m的位置
if i%m==0:
b.append(a[i-1])#将整除m的位置存起来
if len(a)>=m:#在递归的末尾会出现m>len(a)的情况
c=len(a)%m#由于是要围成一个圈依次报数,将其后c(此次删除后剩余的几位作为下一次删除前列表开始的几位)位,移到列表前端
for j in b:
a.remove(j)#删除
print('del---'+str(j))
print("after del:")
print(a)#输出
if c!=0:#不整除创建新的a,也就是前面说的,将后c位前移
for k in range(c):
a.insert(k,a[k-c])
del a[k-c]
yuese(a,m)#递归
'''
elif len(a)<m:#另外的一种情况
c=m%len(a)#换一种思维,用m来除以a的长度(这是规律,自己可以试)
if c==1:#分三种情况
u=a[c-1]
del a[c-1]
print('del---'+str(u))
print("after del:")
print(a)
yuese(a,m)#递归
elif c==0:
u=a[-1]
del a[-1]
print('del---'+str(u))
print("after del:")
print(a)
yuese(a,m)#递归
elif c>1:
p=a[c:]
q=a[:c-1]
a=p+q
print(a)
yuese(a,m)#递归
'''
a=[]
for j in range(40):
a.append(j+1)
print("start:")
print(a)
yuese(a,3)
print("finish!!")
运行结果: