【发布时间】:2017-10-10 10:19:10
【问题描述】:
我正在尝试在 C 中实现一个递归快速排序,它通过使用按位 XOR 操作进行所有交换。这是我到目前为止所得到的:
//bitwise recursive quicksort
void quicksort(int *int_array,int p, int r){
if(p<r){
int q = part(int_array, p, r);
quicksort(int_array,p, q-1);
quicksort(int_array, q+1, r);
}
}
//Partition
int part(int *int_array, int p, int r){
int pivot = int_array[r];
int i = p-1;
int j;
for(j = p; j<=r-1; j++){
if(int_array[j] <= pivot){
i++;
int_array[i] = int_array[i] ^ int_array[j];
int_array[j] = int_array[i] ^ int_array[j];
int_array[i] = int_array[i] ^ int_array[j];
}
}
int_array[i+1] = int_array[i+1] ^ int_array[r];
int_array[r] = int_array[i+1] ^ int_array[r];
int_array[i+1] = int_array[i+1] ^ int_array[r];
return i+1;
}
当我在 20 个整数的数组上运行此代码时,其中 20 个整数中有 19 个变为 0。知道为什么吗?我看不出异或交换有什么问题。任何帮助表示赞赏,谢谢!
【问题讨论】:
标签: recursion bit-manipulation quicksort xor