帮忙看看这个程序--在一组随机排列的数中找出第k小的数(基于快速排序)
#include <stdio.h>#define LEN 8
int a[LEN] = {1, 46, 7, 32, 75, 34, 678, 35};
int partition(int start, int end)
{
int i = start;
int j = end;
int pivot = a[start];
while (i < j){
while (i < j && pivot <= a[j])
j--;
a[i] = a[j];
while (i < j && pivot >a[i])
i++;
a[j] = a[i];
}
a[i] = pivot;
return i;
}
int order_statistic(int start, int end ,int k)
{
int mid ;
mid = partition(start, end); //用partition函数把序列分成两半,中间的pivot元素是序列中的第i个;
if(k == mid)
return a[mid-1]; //返回找到的元素;
else if(k > mid)
order_statistic(mid+1, end , k-mid); //从后半部分找出第k-i小的元素并返回;
else
order_statistic(start, mid-1, k); //从前半部分找出第k小的元素并返回;
}
int main(void)
{
int value;
int i;
value = order_statistic(0, LEN-1, 3);
printf("%d\n", value);
for(i = 0; i < LEN; i++)
printf("%d ", a[i]);
return 0;
}