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

原始地址:双向冒泡


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

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

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

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

 

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

}

 


 

 

你可能感兴趣的:(学习笔记)