我在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;
}
一切正常。为什么呢?