Example #1
0
int *klargest(int list[], int n, int k) {
    int i, last;

    if (n == k)
        return list+n;

    last = 0;
    for (i = 1; i < n; i++)
        if (list[i] > list[0])
            swap(&list[++last], &list[i]);
    swap(&list[last], &list[0]);

    if (k <= last + 1)
        return klargest(list, last+1, k);
    else
        return klargest(list+last+1, n-last-1, k-last-1);
}
Example #2
0
void test_klargest() {
    int list[][5] = {
        {1, 2, 3, 4, 5},
        {2, 4, 3, 5, 1},
        {1, 2, 5, 4, 3},
        {5, 4, 3, 2, 1},
        {1, 1, 2, 2, 2},
        {1, 1, 1, 1, 1}
    };
    int list0[] = {1};
    int i, *p, *k;

    printf("test_klargest\n");
    for (i = 0; i < 6; i++) {
        k = klargest(list[i], 5, 4);
        for (p = list[i]; p != k; p++)
            printf("%d ", *p);
        printf("\n");
    }
    k = klargest(list0, 1, 1);
    for (p = list0; p != k; p++)
        printf("%d ", *p);
    printf("\n");
}
Example #3
0
int main ()
{
	int arr[] = {2, 5, 7, 1, 8, 10, 14, 17, 20, 25, 40, 2, 3, 5, 200};
	klargest (arr, sizeof(arr)/sizeof(arr[0]), 15);
	return 0;
}