现在的位置: 首页 > 综合 > 正文

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

2013年09月07日 ⁄ 综合 ⁄ 共 611字 ⁄ 字号 评论关闭

原始地址:双向冒泡


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

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

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

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

#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";
}
 

抱歉!评论已关闭.