视频:冒泡排序算法演示
列表数据:[45,101,89,90,34,78,23]
JL编程动画演示
for i in range(len(List)-1): #只需要比较6次,因此需要减1
if List[i]>List[i+1]:
List[i],List[i+1]=List[i+1],List[i]
print(List)
第一次排序
for i in range(len(List)-2): #只需要比较5次,因此需要减2
if List[i]>List[i+1]:
List[i],List[i+1]=List[i+1],List[i]
print(List)
第二次排序
List=[45,101,89,90,34,78,23]
for j in range(len(List)-1):
for i in range(len(List)-(j+1)):
if List[i]>List[i+1]:
List[i],List[i+1]=List[i+1],List[i]
print(List)
# [45, 89, 90, 34, 78, 23, 101]
# [45, 89, 34, 78, 23, 90, 101]
# [45, 34, 78, 23, 89, 90, 101]
# [34, 45, 23, 78, 89, 90, 101]
# [34, 23, 45, 78, 89, 90, 101]
# [23, 34, 45, 78, 89, 90, 101]
总代码
请看下面的代码
List=[45,23,89,90,34,78,23]
for j in range(len(List)-1):
for i in range(len(List)-(j+1)):
if List[i]>List[i+1]:
List[i],List[i+1]=List[i+1],List[i]
print(List)
# [23, 45, 89, 34, 78, 23, 90]
# [23, 45, 34, 78, 23, 89, 90]
# [23, 34, 45, 23, 78, 89, 90]
# [23, 34, 23, 45, 78, 89, 90]
# [23, 23, 34, 45, 78, 89, 90]
# [23, 23, 34, 45, 78, 89, 90]
缺点
改进
我们可以为代码添加一个变量,用于记录是否发生交换
List=[23,34,45,89,90,78,23]
for j in range(len(List)-1):
isswap=False
for i in range(len(List)-(j+1)):
if List[i]>List[i+1]:
isswap=True
List[i],List[i+1]=List[i+1],List[i]
if isswap==False:
break
print(List)
# [23, 34, 45, 89, 78, 23, 90]
# [23, 34, 45, 78, 23, 89, 90]
# [23, 34, 45, 23, 78, 89, 90]
# [23, 34, 23, 45, 78, 89, 90]
# [23, 23, 34, 45, 78, 89, 90]
def bubble_sort(List):
for j in range(len(List)-1):
isswap=False
for i in range(len(List)-(j+1)):
if List[i]>List[i+1]:
isswap=True
List[i],List[i+1]=List[i+1],List[i]
if isswap==False:
break
List1=[23,34,45,89,90,78,23]
List2=[45,12,90,3,34,67,45]
bubble_sort(List1)
bubble_sort(List2)
print(List1)
print(List2)
# [23, 23, 34, 45, 78, 89, 90]
# [3, 12, 34, 45, 45, 67, 90]
import random
import time
#冒泡排序算法
def bubble_sort(List):
a=List
for j in range(len(List)-1):
isswap=False
for i in range(len(List)-(j+1)):
if List[i]>List[i+1]:
isswap=True
List[i],List[i+1]=List[i+1],List[i]
if isswap==False:
break
return a
#选择排序算法
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
List=[]
for i in range(5000):
List.append(random.randint(1,10000))
start=time.time()
bubble_sort(List)
end=time.time()
print("冒泡排序算法用时:",end-start)
start=time.time()
sort_funtion(List)
end=time.time()
print("选择排序算法用时:",end-start)
# C:\Users\heyang\Desktop>test.py
# 冒泡排序算法用时: 3.482654571533203
# 选择排序算法用时: 1.14493989944458
# C:\Users\heyang\Desktop>test.py
# 冒泡排序算法用时: 3.4387686252593994
# 选择排序算法用时: 1.2476959228515625
用冒泡排序的方法对图中的序列按从小到大进行排序,画图表示每一步的操作
47
13 |
13 |
49 |
7 |
import turtle
pen=turtle.Pen()
pen.pensize(3)
#冒泡排序算法
def bubble_sort(List):
a=List
for j in range(len(List)-1):
isswap=False
for i in range(len(List)-(j+1)):
if List[i]>List[i+1]:
isswap=True
List[i],List[i+1]=List[i+1],List[i]
if isswap==False:
break
drawing(a)
return a
#定义绘制图形的代码
def drawing(List):
for i in range(len(List)):
pen.forward(List[i])
pen.setheading(180)
pen.forward(List[i])
pen.penup()
pen.setheading(270)
pen.forward(10)
pen.pendown()
pen.setheading(0)
pen.penup()
pen.setheading(270)
pen.forward(20)
pen.pendown()
pen.setheading(0)
List=[47,13,13,49,7]
bubble_sort(List)
turtle.done()