#include <stdio.h>
void swap (int A[], int i, int j) { int t = A[i]; A[i] = A[j]; A[j] = t; }
void Print_topK (int A[], int size)
{
int i;
for (i = 0; i < size; ++i)
{
if (i % 10 == 0 && i != 0)
putchar('\n');
printf("%d ", A[i]);
}
putchar('\n');
}
int quickSelect (int A[], int size, int k)
{
int i;
int last;
int res;
if (size < 1)
return;
srand( (unsigned)time(NULL) );
swap(A, 0, rand() % size);
printf("A[0] = %d\t", A[0]);
last = 0;
for (i = 1; i < size; ++i)
{
if (A[i] < A[0])
swap(A, ++last, i);
}
swap(A, 0, last);
Print_topK(A, size);
if (k <= last)
quickSelect(A, last + 1, k);
else if (k == last + 1)
{
printf("minK = %d\n", A[last]);
return;
}
else
quickSelect(A + last + 1, size - last - 1, k - last - 1);
}
int main()
{
int A[] = {4, 3, 1, 9, 8, 5, 6, 7, 2};
quickSelect( A, sizeof(A)/sizeof(int), 1 );
//Print_topK(A, size);
return 0;
}
quick-select
最新推荐文章于 2024-06-24 09:48:52 发布