选择排序算法
a=[34,56,1,2,3,8,54]
如何让这个列表进行从小到大的排序
排序函数
sorted()
- 括号当中填写要排序的列表
- 返回一个已经排序完成的列表
a=[34,56,1,2,3,8,54]
b=sorted(a) #返回一个新的已经排序好的列表
print(b)
#运行结果
#[1, 2, 3, 8, 34, 54, 56]
新建列表进行排序
新建一个列表B,用于存储已经排序完成的结果
a=[34,56,1,2,3,8,54]
b=[] #建立一个空列表,用于存储已经排序好的数据
for i in range(len(a)): #a有多长,就循环多少次
min1=min(a) #获取现在a当中的最小值
a.pop(a.index(min1)) #弹出a当中的最小值
b.append(min1) #将最小值放到a当中
print(b)
#result
#[1, 2, 3, 8, 34, 54, 56]
选择排序算法
假设我们现在有这样一个列表:[6,5,1,3,4]
每次从剩下的数值当中选择一个最小的,放在开头的位置
1.第一次排序结果:[1,6,5,3,4]
2.第二次排序结果:[1,3,6,5,4]
3.第三次排序结果:[1,3,4,6,5]
4.第四次排序结果:[1,3,4,5,6]
5.第五次排序结果:[1,3,4,5,6]
如何获得最小值?
a=[34,56,1,2,3,8,54]
min1=a[0]
for i in range(len(a)):
if a[i]<min1:
min1=a[i]
print(min1)
#result
#1
如何从列表当中取出值?
index()
- 括号当中传入列表值,获得值的索引
pop()
- 括号当中插入索引值,从列表中删除元素
如何添加元素到列表中?
insert()
- 括号当中传入索引和值,在索引位置插入这个值
a=[34,56,1,2,3,8,54]
for j in range(len(a)): #有多个数,就要循环多少次
minindex=j
for i in range(j,len(a)): #内层循环用于获取最小值的索引
if a[i]<=a[minindex]:
minindex=i
minNumber=a.pop(minindex) #弹出最小值
a.insert(0,minNumber) #将最小值插入到开头
print(a)
#result
#[56, 54, 34, 8, 3, 2, 1]
元素交换
经典交换案例

代码实现
A=4
B=5
temp=A #进行交换
A=B
B=temp
print(A,B) #result:5, 4
我们可以对选择算法进行优化
a=[34,56,1,2,3,8,54]
for j in range(len(a)): #有多个数,就要循环多少次
minindex=j
for i in range(j,len(a)): #内层循环用于获取最小值的索引
if a[i]<=a[minindex]:
minindex=i
# minNumber=a.pop(minindex) #弹出最小值
# a.insert(0,minNumber) #将最小值插入到开头
temp=a[minindex]
a[minindex]=a[j]
a[j]=temp
print(a)
# result
# [1, 2, 3, 8, 34, 54, 56]
另外一种交换方法
A=4
B=5
A,B=B,A
print(A,B)
# result
# 5, 4
封装为通用方法
采用函数方式进行封装
a=[34,56,1,2,3,8,54]
b=[45,12,23,56,34,5]
def sort_funtion(List): #定义排序函数
a=List #复制一个列表出来,不改变原来的列表
for j in range(len(a)): #有多个数,就要循环多少次
minindex=j
for i in range(j,len(a)): #内层循环用于获取最小值的索引
if a[i]<=a[minindex]:
minindex=i
temp=a[minindex] #元素交换
a[minindex]=a[j]
a[j]=temp
return a
print(sort_funtion(a)) #调用函数
print(sort_funtion(b)) #调用函数
综合练习
1.我们在这节课中学习了如何进行排序,那么,你能否把这排序的过程动态展示出来呢? 请尝试编写这样一个程序:利用海龟库,首先展示一个没有排好序的列表b,然后手动输入想要交换的元素的索引值,交换两个元素以达到排序的目的(最终与列表a的内容一致)。只有手动成功排序后程序才会结束,否则无限循环尝试,让使用者体验排序的过程。

import turtle
pen=turtle.Pen()
pen.pensize(4)
def sort_funtion(c): #定义排序函数
a=[]
for i in range(len(c)):
a.append(c[i])
for j in range(len(a)): #有多个数,就要循环多少次
minindex=j
for i in range(j,len(a)): #内层循环用于获取最小值的索引
if a[i]<=a[minindex]:
minindex=i
temp=a[minindex] #元素交换
a[minindex]=a[j]
a[j]=temp
return a
#定义一个画图函数,接受一个列表作为参数
def drawing(a):
for i in range(len(a)):
pen.setheading(90) #绘制
pen.forward(a[i]*3)
pen.setheading(270) #回到原来的位置
pen.forward(a[i]*3)
pen.penup() #移动画笔位置,准备后面的绘制
pen.setheading(0)
pen.forward(20)
pen.pendown()
pen.penup() #画完一个列表之后,准备下一次绘制
pen.setheading(0)
pen.forward(50)
pen.pendown()
def main():
List=[45,12,23,56,34,5]
print("需要排序的列表:",List)
List_complete=sort_funtion(List) #对列表进行排序
drawing(List)
while List_complete!=List:
number1=int(input("需要交换的索引:"))
number2=int(input("需要交换的索引:"))
List[number2],List[number1]=List[number1],List[number2]
drawing(List)
print("现在的列表:",List)
print("排序完成")
turtle.down()
main()
选择排序算法
By yang he
选择排序算法
- 237