深夜的酒吧里,调酒师小王正在用独特的方式整理酒瓶——他先从左往右把高酒瓶移到右侧,又从右往左把矮酒瓶挪到左侧。这种双向整理法,像极了程序员常用的鸡尾酒排序(Cocktail Sort)。今天我们就来揭开这个"会调酒"的算法面纱。
一、为什么需要双向排序?假设你现在要整理书架:先从左到右把大本书籍推至右侧,回头检查时发现最左边混入了一本小书。普通冒泡排序就像固执的管家,每次只会单向检查,而鸡尾酒排序更像聪明的管家,懂得双向检查,效率立竿见影!
经典场景对比:
当遇到[2,3,4,5,1]这样的数组时:
普通冒泡需要4轮遍历鸡尾酒排序只需2轮(1轮右扫+1轮左扫)二、手把手图解算法步骤详解:
1、 设立左右哨兵初始化left=0和right=末尾索引,就像在数组两端设立岗哨
2、 第一轮右扫→
for i in range(left, right): if 左>右: 交换把最大的气泡(元素)推到最右端,完成后右哨兵左移
3、第二轮左扫←
for i in range(right, left, -1): if 右