int quick_sort_part(int *data, int left, int right)
{
if (left >= right)
return left;
int mid = left + (right - left) / 2;
swap(data[mid], data[right]);
int small_idx = left;
for (int i = left; i < right; ++i)
{
if (data[i] < data[right])
{
swap(data[i], data[small_idx]);
++small_idx;
}
}
swap(data[small_idx], data[right]);
return small_idx;
}
void quick_sort_find_k(int *data, int len, int k)
{
int start = 0;
int end = len - 1;
int index = quick_sort_part(data, start, end);
while (index != len - k)
{
if (index < len - k)
{
start = index + 1;
index = quick_sort_part(data, start, end);
}
else
{
end = index - 1;
index = quick_sort_part(data, start, end);
}
}
for (int i = 0; i < k; ++i)
{
printf("%d ", data[len - 1 - i]);
}
printf("n");
}
近期评论