/* Head ends here */
void quickSort(int ar_size, int * ar)
{
int i, j, t;
int pivot = 0;
if((ar_size == 0) || (ar_size == 1))
{
return;
}
int A[1000], B[1000], s1 = 0, s2 = 0;
for(i = 1; i < ar_size; i++)
{
if(ar[i] <= ar[pivot])
{
A[s1++] = ar[i];
}
else
{
B[s2++] = ar[i];
}
}
quickSort(s1, A);
quickSort(s2, B);
t = ar[pivot];
for(i = 0; i < s1; i++)
{
ar[i] = A[i];
}
ar[i] = t;
for(i = 0; i < s2; i++)
{
ar[s1 + i +1] = B[i];
}
for(i = 0; i< ar_size; i++)
{
printf("%d ", ar[i]);
}
printf("\n");
}
/* Tail starts here */
int main()
{
int _ar_size;
scanf("%d", &_ar_size);
int _ar[_ar_size], _ar_i;
for(_ar_i = 0; _ar_i < _ar_size; _ar_i++)
{
scanf("%d", &_ar[_ar_i]);
}
quickSort(_ar_size, _ar);
return 0;
}
答案 0 :(得分:0)
如果我理解正确,您想了解quicksort的工作原理。我建议你看一下this video。
现在关于递归。这个想法很简单。你有一个功能,可以执行特定的功能,但在它自己调用的过程中。一个很好的例子是数字的阶乘。
int factorial(int x)
{
if(x = 0)
return 1;
return x * factorial(x - 1);
}
所以如果我打电话给factorial(4);
我会得到的
factorial(4)
= 4 * factorial(3)
= 4 * 3 * factorial(2)
= 4 * 3 * 2 * factorial(1)
= 4 * 3 * 2 * 1 * factorial(0)
= 4 * 3 * 2 * 1 * 1
= 24