Лучшее решение - использовать любые средства, которые предоставляет выбранный вами язык, что облегчит вашу жизнь.
Однако, предполагая, что этот вопрос больше связан с тем, какой алгоритм вы должны выбрать, я собираюсь предложить здесь другой подход. Если вы говорите о 10 из 100, вам не следует беспокоиться о производительности, если только вы не хотите делать это много раз в секунду.
Например, этот C-код (который настолько же неэффективен, насколько я могу это сделать, не будучи глупым) все еще занимает менее одной десятой секунды для выполнения. Мне не хватает времени даже подумать о том, чтобы пойти выпить кофе.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SRCSZ 100
#define DSTSZ 10
int main (void) {
int unused[SRCSZ], source[SRCSZ], dest[DSTSZ], i, j, pos;
srand (time (NULL));
for (i = 0; i < SRCSZ; i++) {
unused[i] = 1;
source[i] = rand() % 1000;
}
for (i = 0; i < DSTSZ; i++) {
pos = -1;
for (j = 0; j < SRCSZ; j++) {
if (pos == -1) {
if (unused[j]) {
pos = j;
}
} else {
if (unused[j] && (source[j] > source[pos])) {
pos = j;
}
}
}
dest[i] = source[pos];
unused[pos] = 0;
}
printf ("Source:");
for (i = 0; i < SRCSZ; i++) printf (" %d", source[i]);
printf ("\nDest:");
for (i = 0; i < DSTSZ; i++) printf (" %d", dest[i]);
printf ("\n");
return 0;
}
Пропуск через time
дает вам (я немного отформатировал вывод, чтобы сделать его читабельным, но не повлиял на результаты):
Source: 403 459 646 467 120 346 430 247 68 312 701 304 707 443
753 433 986 921 513 634 861 741 482 794 679 409 145 93
512 947 19 9 385 208 795 742 851 638 924 637 638 141
382 89 998 713 210 732 784 67 273 628 187 902 42 25
747 471 686 504 255 74 638 610 227 892 156 86 48 133
63 234 639 899 815 986 750 177 413 581 899 494 292 359
60 106 944 926 257 370 310 726 393 800 986 827 856 835
66 183 901
Dest: 998 986 986 986 947 944 926 924 921 902
real 0m0.063s
user 0m0.046s
sys 0m0.031s
Только когда количество чисел станет большим, вы обычно будете беспокоиться. Не поймите меня неправильно, я не говорю, что вы не должны думать о производительности. Чего не следует делать, так это тратить слишком много времени на оптимизацию неважных вещей - YAGNI и всего этого джаза.
Как и во всех вопросах оптимизации, мера не угадать!