最近读python版的数据结构与算法,裘宗燕 2016年第一版,第9章 排序,文章中讲冒泡排序时提到了交错冒泡排序,并把它留作了练习,因此,在这里我把我的答案留在这里参考使用:
def stagger_sort(lst):
'''
#交错冒泡排序
#具体做法是 第一遍从左向右移动,下一遍从右向左移动,交替进行。
#目的 解决冒泡排序中存在一些距离最终位置很远的元素导致对算法的拖累。
'''
e = 0 #奇偶 奇数正排序,偶数倒排序
to_right = 1
to_left = len(lst)-1 # 记录正序和倒叙开始排序位置,避免重复比对
no_finish = True #循环标记符
while no_finish:
found = False #标记是否有元素移动,
if e % 2 == 0:
for j in range(to_right, len(lst)):
#从左向右
if lst[j-1] > lst[j]:
lst[j], lst[j-1] = lst[j-1], lst[j]
found = True
to_left -= 1
else:
for j in range(to_left, -1, -1):
#从右向左
if lst[j] > lst[j+1]:
lst[j], lst[j+1] = lst[j+1], lst[j]
found = True
to_right +=1
if not found: #False 代表循环后没有发生过元素移动 意味着排完可以退出总循环
no_finish = False
e += 1