• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

两数交换的问题

发布: 2007-7-01 20:40 | 作者: admin | 来源: | 查看: 22次 | 进入软件测试论坛讨论

领测软件测试网  

交换两个数有两中最基本的方法,两数直接交换和通过第三方交换。

通过第三方交换是最安全的。两数直接交换有时候会导致一些问题。

请看下列:

这是一个最基本的选择排序算法

template<class T>

int Max(T a[],int n)

{

       int pos=0;

       for(int i=1;i<n;++i)

       {

              if(a[pos]<a[i])

                     pos=i;

       }

       return pos;

}

template<class T>

void Swap(T &lhs,T &rhs)

{

 

        lhs=lhs+rhs;

        rhs=lhs-rhs;

        lhs=lhs-rhs;

}

template<class T>

void SelectionSort(T a[],int n)

{

      

       for(int i =n;i>0;--i)

              Swap(a[Max(a,i)],a[i-1]);

       for(i=0;i<n;++i)

        

              cout<<a[i]<<´ ´;

       cout<<endl;

}

 

int main()

{

       int a[]={4,3,9,3,7};

     SelectionSort(a,5);

       return 0;

}

注意,现在该算法的输出为: 0 3 4 7 9

无缘无故出来一个零,在该算法中只有Max这个函数采用引用来导入参数,问题就出在这里,

请看具体的过程,第一次取最大值后,数组为 4 3 7 3 9

                第二次取最大值后,数组为 4 3 3 7 9

                          第三次取最大值后,数组为 3 3 4 7 9

                第四次取最大值后,数组为 3 3 4 7 9

此时的max 的两个参数,lhs,rhs 指向了同一个值,也就是都是对 a[0]的引用。

在看lhs=lhs+rhs;  rhs=lhs-rhs;   lhs=lhs-rhs;   就导致了a[0]的值为0。

所以,在两数交换的时候,最好还是用第三方交换,以免出现不必要的错误。

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网