选择排序问题?求助!
我看到一个选择排序的算法,对于其中的一处有不明白之处,望高手帮我解答哈!谢谢了!
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];
[解决办法]
正确解释 异或操作交换 貌似以前做个一个通过异或交换值的题