一 概述
双向选择排序(又称鸡尾酒选择排序)是选择排序的优化版本,核心改进在于每轮遍历同时确定未排序部分的最小值和最大值,分别交换到序列两端,从而减少遍历轮数。
二 时间复杂度
时间复杂度为(O(n^2)),但实际比较次数约为标准选择排序的 (1/2)。
三 C++实现代码
#include <iostream>
#include <algorithm> // 用于swap函数
void bidirectionalSelectionSort(int arr[], int n) {
int left = 0, right = n - 1;
while (left < right) {
int min_idx = left, max_idx = right;
// 遍历未排序区间[left, right],寻找最小值和最大值
for (int i = left; i <= right; i++) {
if (arr[i] < arr[min_idx]) min_idx = i;
if (arr[i] > arr[max_idx]) max_idx = i;
}
// 将最小值交换到左端
std::swap(arr[left], arr[min_idx]);
// 若最大值原本在left位置,需更新max_idx