C / C++算法学习笔记(7)-双向冒泡

这篇博客探讨了双向冒泡排序算法,不同于传统的单向冒泡,该算法通过双向震荡来尝试减少交换次数。虽然作者不确定是否真的能减少交换,但认为这段代码独特且有趣,适合学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原始地址:双向冒泡


通常的冒泡是单向的,而这里是双向的,也就是说还要进行反向的工作。

代码看起来复杂,仔细理一下就明白了,是一个来回震荡的方式。

写这段代码的作者认为这样可以在冒泡的基础上减少一些交换(我不这么认为,也许我错了)。

反正我认为这是一段有趣的代码,值得一看。

#include <iostream.h>
void Bubble2Sort(int* pData,int Count)
{
    int iTemp;
    int left =1;
    int right =Count -1;
    int t;
    do
    {
        //正向的部分
       for(int i=right;i>=left;i--)
        {
            if(pData[i]<pData[i-1])
            {
               iTemp = pData[i];
               pData[i] = pData[i-1];
               pData[i-1] = iTemp;
               t = i;
            }
        }
        left = t+1;
 
        //反向的部分
        for(i=left;i<right+1;i++)
        {
            if(pData[i]<pData[i-1])
            {
               iTemp = pData[i];
               pData[i] = pData[i-1];
               pData[i-1] = iTemp;
               t = i;
            }
        }
        right = t-1;
    }while(left<=right);
}
 
void main()
{
    int data[] = {10,9,8,7,6,5,4};
    Bubble2Sort(data,7);
    for (int i=0;i<7;i++)
        cout<<data[i]<<" ";
    cout<<"/n";
}
 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值