#define swap(a,b) a^=b^=a^=b的问题 | 交换宏的错误

本文探讨了在快速排序代码中使用#define swap(a,b) a^=b^=a^=b作为交换宏导致的错误。尽管该操作在单独运行时可能正常,但在特定上下文中,由于异或运算的性质,特别是偶数次异或会得到0,这可能导致排序结果不正确。文章引用了异或运用于解题的原理进行分析。" 116524187,10956318,深入解析Spring BeanDefinition源码,"['Java', 'Spring框架', '源码分析', '配置管理', 'Bean管理']
摘要由CSDN通过智能技术生成
#include<stdio.h>
//#include<algorithm>
using namespace std;
const int N = 1000000;
int a[N];
int n;
void swap(int &a,int &b){
	printf("a = %d, b = %d",a,b);
	a^=b^=a^=b;
	printf("-> a = %d, b = %d\n",a,b);
}
void qs(int l,int r){
	if(l>=r)return;
	swap(a[l],a[(l+r)/2]);
	int i = l,j = r;
	int p = a[l];
	while(i<j){
		while(i<j&&a[j]>=p)j--;
		while(i<j&&a[i]<=p)i++;
		swap(a[i],a[j]);
	}
	swap(a[l],a[j]);
	qs(l,i);
	qs(i+1,r);
}
int main(){
	scanf("%d",&n);
	for(int i =0;i<n;i++)scanf("%d",&a[i]);
	qs(0,n-1);
	for(int i = 0;i<n;i++)printf("%d ",a[i]);
} 

在这段快排代码中

void swap(int &a,int &b){
	printf("a = %d, b = %d",a,b);
	a^=b^=a^=b;
	printf("-> a = %d,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值