冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,若是他们的顺序错误就把他们交换过来。遍历数列的工做是重复地进行直到没有再须要交换,也就是说该数列已经排序完成。这个算法的名字由来是由于越小的元素会经由交换慢慢“浮”到数列的顶端。算法
冒泡排序算法的运做以下:数组
添加 flag 参数优化
记录上次交换的位置spa
鸡尾酒排序code
def sort(a):
for i in range(len(a)-1, 0, -1):
for j in range(i):
if a[j] > a[j+1]:
a[j], a[j+1] = a[j+1], a[j]
# 优化1: 添加标记flag, 若是内循环中的判断没有执行,表示已经数组是排序好的,直接退出循环便可
def sort_better1(a):
for i in range(len(a)-1, 0, -1):
print("i------" + str(i))
flag = True #若是下面的循环中的判断没有执行,表示已经数组是排序好的,直接退出循环便可
for j in range(i):
print("j------" + str(j))
if a[j] > a[j+1]:
a[j], a[j+1] = a[j+1], a[j]
flag = False
print(a)
if flag:
break
# 优化2:记录上次最后一次交换元素的位置,那么次位置以后的就是已经排序好的,下次遍历的时候就不须要再遍历此位置以后的元素
def sort_better2(a):
last_position = len(a) - 1
for i in range(len(a)-1, 0, -1):
print("i------" + str(i))
flag = True
index = 0
for j in range(last_position):
print("j------" + str(j))
if a[j] > a[j+1]:
a[j], a[j+1] = a[j+1], a[j]
flag = False
index = j
print(a)
if flag:
break
last_position = index
# 优化3: 鸡尾酒排序 鸡尾酒排序,即双向的冒泡排序,等因而冒泡排序的轻微变形。不一样的地方在于从低到高而后从高到低
#(有前后顺序,并不是同时;大循环下第一个循环是从开始扫到结束,将最大的归到最后;第二个循环是从倒数第二个位置往开始端扫,将最小的归到开始的位置)
def sort_better3(a):
last_position = len(a) - 1
for i in range(len(a)-1, 0, -1):
print("i------" + str(i))
flag = True
index = 0
for j in range(last_position):
print("j------" + str(j))
if a[j] > a[j+1]:
a[j], a[j+1] = a[j+1], a[j]
flag = False
index = j
last_position = index
for k in range(last_position, 0, -1):
print("k------" + str(k))
if a[k] < a[k-1]:
a[k], a[k-1] = a[k-1], a[k]
flag = False
print(a)
if flag:
break
li = [2, 7, 3, 1, 5, 4, 8, 9, 10]
sort(li)
print(li)
a = [2, 7, 3, 1, 5, 4, 8, 9, 10]
#sort_better1(a)
#print(a)
b = [2, 7, 3, 1, 5, 4, 8, 9, 10]
sort_better2(b)
print(b)
c = [2, 7, 3, 1, 5, 4, 8, 9, 10]
#sort_better3(c)
#print(c)复制代码