我正在C中实现QuickSort.
这是我的交换程序:
void swap(int *x,int *y) { *x += (*y); *y = (*x) - (*y); *x = (*x) - (*y); }
这是我的分区程序:
int partition(int a[],int sx,int dx) { int indice_pivot = (rand()%(dx-sx+1))+sx; int i = sx-1,j; swap(&a[indice_pivot],&a[dx]); for(j=sx;j<dx;j++) { if(a[j] <= a[dx]) { i++; swap(&a[j],&a[i]); } } i++; swap(&a[i],&a[dx]); return i; }
问题是,当交换两个变量时,它们神奇地(?)变为0.我做了一些调试,一切似乎在交换过程中工作正常.但是数组在某些分区的末尾包含零(并非所有分区).
奇怪的是,如果我用替换交换过程
void swap(int *x,int *y) { int temp = *y; *y = *x; *x = temp; }
一切正常.为什么?