首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

选择排序有关问题?

2012-04-13 
选择排序问题?求助!我看到一个选择排序的算法,对于其中的一处有不明白之处,望高手帮我解答哈!谢谢了!void

选择排序问题?求助!
我看到一个选择排序的算法,对于其中的一处有不明白之处,望高手帮我解答哈!谢谢了!
void SelectionSort(int *a,int n)
{
int i,j,k;
for(i=0;i<n-1;i++)
  {
  j=i;
  for(k=j;k<n;k++)
  {
  if(*(a+j)>*(a+k))
j=k;
  }
if(i!=j)
{
*(a+i)=*(a+i)^*(a+j);
*(a+j)=*(a+i)^*(a+j);
*(a+i)=*(a+i)^*(a+j);
  /*对于这一段我不明白额,我知道这应该是将无序区中最小的值放到有序区中的最后面,
但是这段代码看不懂额*/
}
}
 }

[解决办法]
*(a+i)=*(a+i)^*(a+j); 
*(a+j)=*(a+i)^*(a+j);
*(a+i)=*(a+i)^*(a+j);
这段代码其实就是交换两个元素的值,与下面这段代码是一样的,只是不要临时变量去过渡:

temp = *(a+i);
*(a+i) = *(a+j);
*(a+j) = temp;

*(a+i)其实就是a[i],*(a+j)其实就是a[j];
[解决办法]
正确解释 异或操作交换 貌似以前做个一个通过异或交换值的题

探讨

*(a+i)=*(a+i)^*(a+j); 
*(a+j)=*(a+i)^*(a+j);
*(a+i)=*(a+i)^*(a+j);
这段代码其实就是交换两个元素的值,与下面这段代码是一样的,只是不要临时变量去过渡:

temp = *(a+i);
*(a+i) = *(a+j);
*(a+j) = temp;

*(a+i)其实就是a[i],*(a+j)其实就是a[j];

热点排行