python学习_007

三数排序多种方法

依次接收用户输入的3个数,排序并打印 升序

要求使用以下几种方法实现

  1. 转换 int 后,判断大小排序,使用分支结构完成
  2. 使用max函数
  3. 使用列表的 sort 方法
  4. 冒泡排序

分支

假设 用户输入 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)

冒泡排序详解

原文地址:https://www.cnblogs.com/shenshuoyaoyouguang/p/13061055.html