ITPub博客

首页 > IT基础架构 > 网络安全 > 两数交换的问题 (转)

两数交换的问题 (转)

原创 网络安全 作者:worldblog 时间:2007-12-13 13:20:15 0 删除 编辑
两数交换的问题 (转)[@more@] 

交换两个数有两中最基本的方法,两数直接交换和通过第三方交换。XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />

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

请看下列:

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

template

int Max(T a[],int n)

{

  int pos=0;

  for(int i=1;i

  {

    if(a[pos]

    pos=i;

  }

  return pos;

}

template

void Swap(T &lhs,T &rhs)

{

 

  lhs=lhs+rhs;

  rhs=lhs-rhs;

  lhs=lhs-rhs;

}

template

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

   

    cout<

  cout<

}

 

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。

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

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-992881/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    6241
  • 访问量
    2449807