我的按位交换不起作用
My bit-wise swapping isn't working
我正在尝试简单的插入排序。但是当我使用按位操作时,我正在尝试的交换不起作用。
但是当我使用另一个临时变量时,交换有效。当我编译这段代码时,我总是得到一些额外的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;
}
in
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]
是最小的数组元素,则尝试将其与自身交换,因此传递给 swap 的两个指针指向相同的内存位置,因此 xor 将该位置归零。
既然你使用的是插入排序,我可以假设这是一个练习吗?
您认为当a
和b
引用同一地址时,swap
会怎么做?在一张纸上尝试一下,你会看到你多余的零来自哪里。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 循环在计数器中不起作用
- 在其他文件中创建类时在 c++ 项目中不起作用
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 为什么二进制搜索在我的测试中不起作用
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- swap(int&, int&) 函数不起作用,当交换不使用临时变量时?
- 为什么这种交换方法不起作用
- 为什么基于指针交换两个值在函数范围之外不起作用?
- 为什么交换2d数组指针不起作用
- 为什么在C++中,交换指针在向量中不起作用
- 交换堆栈的 2 个值不起作用
- 我的按位交换不起作用
- 为什么单行异或交换在Javascript中不起作用,但在C++中起作用?
- 交换两个数字而不使用额外的空间,如果两个数字都指向相同的位置,则不起作用