三数排序多种方法
依次接收用户输入的3个数,排序并打印 升序
要求使用以下几种方法实现
- 转换 int 后,判断大小排序,使用分支结构完成
- 使用max函数
- 使用列表的 sort 方法
- 冒泡排序
分支
假设 用户输入 1 2 3 那么可能出现的情况只有 6 种
123 132 213 231 312 321
构造列表,使用户输入到列表中
# 1 使用for 循环
x=[]
for i in range(3):
x.append(input(":"))
# 2 使用 while 循环
x=[]
while 3:
x.append(input(":"))
#python 中支持交换变量值的语法
x=1
y=2
x,y=y,x
#x y 就完成了交换
观察那6种情况
#使用分支结构
x=[]
print("请输入三个数:")
for i in range(3):
s=int(input(":"))
x.append(s)
if x[0]>x[1] and x[0]<x[2] : # 2 1 3
x[0],x[1]=x[1],x[0]
elif x[0]<x[2] and x[2]<x[1]: # 1 3 2
x[1],x[2]=x[2],x[1]
elif x[2]<x[0] and x[0]<x[1]: # 2 3 1
x[0],x[1],x[2]=x[2],x[0],x[1]
elif x[2]<x[1] and x[1]<x[0]: # 3 2 1
x=x[::-1]
elif x[1]<x[2] and x[2]<x[0]: # 3 1 2
x[0],x[1],x[2]=x[1],x[2],x[0]
#还有一种可能是不变
print(x)
#使用分支结构 优化
x=[]
print("请输入三个数:")
for i in range(3):
x.append(input(":"))
if x[0]>x[1]:
if x[0]>x[2]:
if x[1]>x[2]:
x[0],x[2]=x[2],x[0] # 3 1 2
else:
x[0],x[1],x[2]=x[1],x[2],x[0] # 2 3 1
else:
x[0],x[1]=x[1],x[0] # 2 1 3
else:
if x[0]>x[2]:
x[0],x[1],x[2]=x[2],x[0],x[1] # 3 1 2
else:
if x[1]>x[2]:
x[1],x[2]=x[2],x[1] # 1 3 2
#最后是原本正确顺序进行排列,直接省略
# else:
# x[0],x[1],x[2]=x[0],x[1],x[2]
#这个最多只会判断三次
print(x)
max函数
这个效率感觉不是很高
# 使用max函数
x=[]
print("请输入三个数:")
while 3:
x.append(int(input(":")
flag=[]
for i in range(3):
Max=max(x) #取出最大值
flag.append(Max) #追加到列表尾部
x.remove(Max) #移除原本列表中的最大值
flag=flag[::-1] #对列表元素进行逆序
print(flag)
sort 方法
使用简单,但是快不快,我就不知道了
# 使用 列表的 sort 方法实现
x=[]
print("请输入三个数:")
for i in range(3):
s=int(input(":"))
x.append(s)
x.sort(key=int)
print(x)
冒泡排序
当初第一个排序算法就是学的她, 感觉还行
属于交换排序 两两比较大小,交换位置
有n个数,就需要排 n-1 次 每排一次,剩余的最大的数,会到剩余表的末尾,剩余数-1
我又想起了我学c语言的时候,写的冒泡排序,那是真的狠,直接对着书敲 因为没有代码的经验,但是自从被c虐了之后,感觉简简单单
# 使用冒泡排序方法
x=[]
print("请输入三个数:")
for i in range(3):
s=int(input(":"))
x.append(s)
length=len(x)
for i in range(length): #外层循环length 次
for j in range(length-1-i): #-1 是为了防止数组访问越界
if x[j]>x[j+1]: #当符合这个判断的时候,就行交换数据
x[j],x[j+1]=x[j+1],x[j]
print(x)