双向冒泡排序算法
一 概述
双向冒泡排序(Cocktail Shaker Sort)是传统冒泡排序的改进版本,通过双向交替扫描数组,在每轮循环中同时将最大值移动到右侧、最小值移动到左侧,从而减少排序轮次。
二、算法步骤
初始数组:[6,4,7,8,2]
第1轮双向扫描
正向扫描(左→右):
比较6和4 → 交换 → [4,6,7,8,2]
比较6和7 → 不交换
比较7和8 → 不交换
比较8和2 → 交换 → [4,6,7,2,8]
此时右边界收缩到索引3(原索引4已放置最大值8)
反向扫描(右←左):
比较7和2 → 交换 → [4,6,2,7,8]
比较6和2 → 交换 → [4,2,6,7,8]
比较4和2 → 交换 → [2,4,6,7,8]
左边界收缩到索引1(原索引0已放置最小值2)
第2轮双向扫描
正向扫描(左→右):
在索引1到3之间扫描:
4和6 → 不交换
6和7 → 不交换
无交换发生 → 提前终止排序
三、C++实现代码
#include <iostream>
#include <algorithm> // 包含swap函数
void cocktailSort(int arr[], int n) {
int left = 0, right = n - 1;
bool swapped = true;
while (left < right && swapped