C / C++算法学习笔记(4)-交换法

原始地址:C / C++算法学习笔记(4)-交换法

 

交换法:

交换法的程序最清晰简单,每次用当前的元素一一的同其后的元素比较并交换。

#include <iostream.h>

void ExchangeSort(int* pData,int Count)

{

    int iTemp;

    for(int i=0;i<Count-1;i++)

    {

        for(int j=i+1;j<Count;j++)

        {

            if(pData[j]<pData[i])

            {

               iTemp = pData[i];

               pData[i] = pData[j];

               pData[j] = iTemp;

            }

        }

    }

}

 

void main()

{

    int data[] = {10,9,8,7,6,5,4};

    ExchangeSort(data,7);

    for (int i=0;i<7;i++)

        cout<<data[i]<<" ";

    cout<<"/n";

}


 

      比较前|第一次|第二次|第三次|第四次|第五次|第六次

        10        9           8         7                   5         4           

         9        10         10       10        10        10       10

         8          8          9         9          9          9         9

         7          7          7         8          8          8         8

         6          6          6         6          7          7         7

         5          5          5         5          5          6         6

         4          4          4         4          4          4         5

从上面的算法来看,基本和冒泡法的效率一样。

倒序(最糟情况)

第一轮:10,9,8,7->9,10,8,7->8,10,9,7->7,10,9,8(交换3次)

第二轮:7,10,9,8->7,9,10,8->7,8,10,9(交换2次)

第一轮:7,8,10,9->7,8,9,10(交换1次)

循环次数:6

交换次数:6

 

其他:

第一轮:8,10,7,9->8,10,7,9->7,10,8,9->7,10,8,9(交换1次)

第二轮:7,10,8,9->7,8,10,9->7,8,10,9(交换1次)

第一轮:7,8,10,9->7,8,9,10(交换1次)

循环次数:6

交换次数:3

 

从运行的表格来看,交换几乎和冒泡一样糟。事实确实如此。循环次数和冒泡一样也是1/2*(n-1)*n,所以算法的复杂度仍然是O(n*n)。由于我们无法给出所有的情况,所以只能直接告诉大家他们在交换上面也是一样的糟糕(在某些情况下稍好,在某些情况下稍差)。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值