Среди элементов массива Z (m) найти k (k « m) крупнейших - C (СИ)

Формулировка задачи:

Среди элементов массива Z (m) найти k (k « m) крупнейших. Поиск осуществить за один проход (просмотр) массива Z

Код к задаче: «Среди элементов массива Z (m) найти k (k « m) крупнейших - C (СИ)»

textual
#include <u.h>
#include <libc.h>
 
#define MAXUINT ((uint)-1)
#define MAXINT  (MAXUINT>>1)
#define MININT  (MAXINT+1)
 
#define M 10
#define K 5
 
void
printv(int v[], int n)
{
    int i;
    for (i = 0; i < n; i++)
        print("%d ", v[i]);
    print("\n");
}
 
void
main(void)
{
    int i, j, k, v[M], vmax[K];
 
    srand(nsec());
    for (i = 0; i < M; i++)
        v[i] = nrand(M);
 
    for (i = 0; i < K; i++)
        vmax[i] = MININT;
 
    for (i = 0; i < M; i++) {
        k = -1;
        for (j = 0; j < K; j++)
            if (v[i] > vmax[j]) {
                k = j;
                break;
            }
        if (k < 0)
            continue;
        for (j = K - 1; j > k; j--)
            vmax[j] = vmax[j-1];
        vmax[k] = v[i];
    }
 
    printv(v, M);
    printv(vmax, K);
 
    exits(0);
}

12   голосов, оценка 3.833 из 5


СОХРАНИТЬ ССЫЛКУ
Похожие ответы