2

我正在尝试一个简单的插入排序。但是当我使用按位操作时,我尝试的交换不起作用。

但是当我使用另一个临时变量时,交换工作。当我编译这段代码时,我总是得到一些额外的 0。

如何找出我的代码有什么问题?

#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<algorithm>

using namespace std;

void swap(int* a, int* b)
{
*a=*a^*b;
*b=*a^*b;
*a=*a^*b;
}

int main(void)

{
int arr[size];
int i,j,min;

for(i=0; i<size; i++)
    arr[i]=rand()%100;

for(i=0; i<size; i++)
    printf("%d ",arr[i]);
putchar('\n');

for(i=0; i<size;i++)
{
    min=i;
    for(j=i+1;j<size;j++)
        if(arr[j]<arr[min])
            min=j;
    swap(&arr[i],&arr[min]);
}

for(i=0; i<size; i++)
    printf("%d ",arr[i]);
putchar('\n');

return 0;
}
4

2 回答 2

7

for(i=0; i<size;i++)
{
    min=i;
    for(j=i+1;j<size;j++)
        if(arr[j]<arr[min])
            min=j;
    swap(&arr[i],&arr[min]);
}

如果arr[i]是最小的数组元素,则尝试将其与自身交换,因此传递给交换的两个指针指向相同的内存位置,因此异或将该位置清零。

于 2012-05-21T20:41:48.277 回答
1

由于您使用的是插入排序,我可以假设这是一个练习吗?

你认为swapab引用同一个地址时会做什么?在一张纸上试一试,你会看到多余的零是从哪里来的。

于 2012-05-21T20:44:37.450 回答