这是一道代码填空题。
#include <stdio.h>
void swap(int a[], int i, int j)
{
int t = a[i];
a[i] = a[j];
a[j] = t;
}
int partition(int a[], int p, int r)
{
int i = p;
int j = r + 1;
int x = a[p];
while (1)
{
while (i < r && a[++i] < x);
while (a[--j] > x);
if (i >= j)
{
break;
}
swap(a, i, j);
}
/*______________________;*/
//代填语句
swap(a, p, j);
return j;
}
void quicksort(int a[], int p, int r)
{
if (p < r)
{
int q = partition(a,p,r);
quicksort(a,p,q-1);
quicksort(a,q+1,r);
}
}
int main()
{
int i;
int a[] = {5,13,6,24,2,8,19,27,6,12,1,17};
int N = 12;
quicksort(a, 0, N-1);
for(i = 0; i < N; i++)
{
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
草稿纸上把第一个Partition分析了一下,,不知道怎么抽抽了没想着要把基准值换过来……
还是掌握排序算法掌握的不熟!