今天遇到一个问题,很是头疼。描述如下:
写快速排序算法时,最后调用了函数
void QuickSort(int *R)
{
int length;
length = sizeof(R) / sizeof(int);
QSort(R, 1, length-1); //对R[ 1 ] 到R[ length-1 ] 之间的元素进行快速排序
}
其中参数中的R是一维数组的首元素地址,即R[ 10 ]中的R。然后运行之后,输出发现R并没有被排序。但是如果把QuickSort()函数中的内容放在主程序中运行,又能够排序了。请问一下大家,这是个什么情况。
length = sizeof(R) / sizeof(int);
这行是错的,在函数里的sizeof(R)实际是得到指针的长度,不是数组的长度,你应该将数组的长度作为参数传递进来
void QuickSort(int *R,int n)
{
QSort(R, 1, n-1);
}