在编程实践中,关于快速排序的章节中,有一些 C 代码遍历了快速排序的基本算法(我已经将代码编译成一个打印任意数组的程序排序前和排序后的值):
#include<stdio.h>
#include<stdlib.h>
void swap(int v[], int i, int j)
{
int temp;
temp = v[i];
v[i] = v[j];
v[j] = temp;
}
void quicksort (int v[], int n)
{
int i, last;
if (n <= 1)
return;
swap(v, 0, rand() % n);
last = 0;
for (i = 1; i < n; i++)
{
if (v[i] < v[0])
{
swap (v, ++last, i);
}
}
swap(v, 0, last);
quicksort(v, last);
quicksort(v+last+1, n-last-1);
}
void printIntegerArray(int arrayInput[], int arraySize)
{
for (int i = 0; i < arraySize; i++)
{
printf("%d ", arrayInput[i]);
}
printf("\n");
}
int main(void)
{
int array[5] = {7, 10, 14, 12, 4};
int arraySize = sizeof(array) / sizeof(array[0]);
printf("Before sorting: ");
printIntegerArray(array, arraySize);
quicksort(array, arraySize);
printf("After sorting: ");
printIntegerArray(array, arraySize);
}
除了第二个递归调用,我什么都懂:
quicksort(v+last+1, n-last-1);
“v+last+1”是做什么的?我不会假设 C 在运行时更改数组的大小,所以它只是说输入是“一个数组,从 V[last+1] 开始”还是别的什么?一如既往,抱歉,如果我在另一篇文章中错过了这个。我尝试搜索我的问题的几个变体版本。
最佳答案
is it simply saying that the input is 'an array, starting from V[last+1]' or is it something else?
是指针运算,你的猜测基本正确,只不过传递的确实是一个指针。
当作为函数参数传递时,数组总是自动转换为指向第一个元素的指针。因此,当 v
被传递时,它实际上是指向传递的第一个元素的指针。而v+last+1
是指向v
第一个元素之后的last+1
个元素的指针。
关于c - 将数组传递给具有奇数格式的函数 - "v+last+1",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22141124/