冒泡算法:比较两个相邻的元素,将值大的元素交换到右边。
更快速的单向冒泡算法:
def Bubble(lists):
"""
原始版
冒泡算法,两两之间进行交换比较大的往后移动
:param lists: 输入待排序数组
:return: 返回排序好的数组
"""
for i in range(len(lists) - 1):
for j in range(len(lists) - 1 - i):
if lists[j] > lists[j + 1]:#比较交换
lists[j], lists[j + 1] = lists[j + 1], lists[j]
return lists
def Bubble_My(lists):
"""
自己优化版
冒泡算法,两两之间进行交换比较大的往后移动
:param lists: 输入待排序数组
:return: 返回排序好的数组
"""
for i in range(len(lists) - 1):
flags = False
tmp=len(lists) - 1 - i
for j in range(tmp):
if flags==True:
if lists[j] >= lists[j + 1]:
lists[j], lists[j + 1] = lists[j + 1], lists[j]
if lists[j]>=lists[tmp]:#最大数一步到位放置当前排序最后
lists[j], lists[tmp] = lists[tmp], lists[j]
flags=True
return lists
def Bubble_sort2(items):
"""
网络上的人家优化版2
冒泡算法,两两之间进行交换比较大的往后移动
:param lists: 输入待排序数组
:return: 返回排序好的数组
"""
for i in range(len(items) - 1):
flag = False
for j in range(len(items) - 1 - i):
if items[j] > items[j + 1]:
items[j], items[j + 1] = items[j + 1], items[j]
flag = True
if flag:
flag = False
for j in range(len(items) - 2 - i, 0, -1):
if items[j - 1] > items[j]:
items[j], items[j - 1] = items[j - 1], items[j]
flag = True
if not flag:
break
return items
def Bubble_sort1(list):
"""
网络上的人家优化版1
冒泡算法,两两之间进行交换比较大的往后移动
:param lists: 输入待排序数组
:return: 返回排序好的数组
"""
x = len(list)
for i in range(x - 1):
isSorted = True
for j in range(0, x - 1 - i):
if list[j] > list[j + 1]:
list[j], list[j + 1] = list[j + 1], list[j]
isSorted = False
if isSorted:
break
return list
import time
import random
lists=[i for i in range(1000)]
random.shuffle(lists)
tmp0=lists.copy()
tmp1=lists.copy()
tmp2=lists.copy()
tmp3=lists.copy()
tmp4=lists.copy()
start=time.time()
print(Bubble(tmp0))
end=time.time()
print("冒泡排序时间:",end-start)
start=time.time()
print(Bubble_sort1(tmp1))
end=time.time()
print("优化1排序时间:",end-start)
start=time.time()
print(Bubble_sort2(tmp2))
end=time.time()
print("优化2排序时间:",end-start)
start=time.time()
print(Bubble_My(tmp3))
end=time.time()
print("我的优化排序时间",end-start)
测试结果: