鸡尾酒排序

鸡尾酒排序算法解析
本文介绍了一种双向冒泡排序方法——鸡尾酒排序,该算法通过从前向后及从后向前交替进行元素比较与交换,实现了更高效的排序过程。文章提供了具体的C++模板实现代码。

 

#ifndef COCKTAIL_SORT_H
#define COCKTAIL_SORT_H
#include<vector>

/// 鸡尾酒排序
/// 要是文艺点的话,可以说是搅拌排序,通俗易懂点的话,就叫“双向冒泡排序”,
template<typename T>
class sort_cocktail
{
public:
    static void sort(std::vector<T>& arr)
    {
        //判断是否已经排序了
        auto need_sort = false;

        //因为是双向比较,所以比较次数为原来数组的1/2次即可。
        for (int i = 1; i <= arr.size() / 2; i++)
        {
            //从前到后的排序 (升序)
            for (int m = i - 1; m <= arr.size() - i; m++)
            {
                //如果前面大于后面,则进行交换
                if (m + 1 < arr.size() && arr[m] > arr[m + 1])
                {
                    auto temp = arr[m];
                    arr[m] = arr[m + 1];
                    arr[m + 1] = temp;

                    need_sort = true;
                }
            }

            //从后到前的排序(降序)
            for (int n = arr.size() - i - 1; n >= i; n--)
            {
                //如果前面大于后面,则进行交换
                if (n > 0 && arr[n - 1] > arr[n])
                {
                    auto temp = arr[n];
                    arr[n] = arr[n - 1];
                    arr[n - 1] = temp;

                    need_sort = true;
                }
            }

            //当不再有排序,提前退出
            if (!need_sort)
            {
                break;
            }
        }
    }
};

#endif // COCKTAIL_SORT_H

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值