Найти 3 самых больших числа в векторе - PullRequest
2 голосов
/ 08 ноября 2010

Я пытаюсь сделать функцию, чтобы получить 3 самых больших числа в векторе.Например: Numbers: 1 6 2 5 3 7 4 Результат: 5 6 7

Я подумал, что могу отсортировать их DESC, получить 3 числа в начале и после этого прибегнуть к ним ASC, но это будеттрата памяти и времени выполнения.Я знаю, что есть более простое решение, но я не могу понять это.И еще одна проблема, что если у меня есть только два числа ...

Кстати: я использую в качестве компилятора BorlandC ++ 3.1 (я знаю, очень старый, но это то, что я буду использовать на экзамене ..)

Спасибо, ребята.

Л.Е .: Если кто-то хочет узнать больше о том, чего я пытаюсь достичь, вы можете проверить код:

#include<fstream.h>
#include<conio.h>

int v[1000], n;
ifstream f("bac.in");

void citire();
void afisare_a();
int ultima_cifra(int nr);
void sortare(int asc);

void main() {
    clrscr();
    citire();
    sortare(2);
    afisare_a();
    getch();
}

void citire() {
    f>>n;
    for(int i = 0; i < n; i++)
        f>>v[i];
        f.close();
}                            

void afisare_a() {
    for(int i = 0;i < n; i++)
            if(ultima_cifra(v[i]) == 5)
            cout<<v[i]<<" ";
}

int ultima_cifra(int nr) {
    return nr - 10 * ( nr / 10 );
}

void sortare(int asc) {
    int aux, s;
        if(asc == 1)
        do {
            s = 0;
            for(int i = 0; i < n-1; i++)
                if(v[i] > v[i+1]) {
                    aux = v[i];
                    v[i] = v[i+1];
                    v[i+1] = aux;
                    s = 1;
                }
        } while( s == 1);
    else
        do {
            s = 0;
            for(int i = 0; i < n-1; i++)
                if(v[i] < v[i+1]) {
                    aux = v[i];
                    v[i] = v[i+1];
                    v[i+1] = v[i];
                                        s = 1;
                }
                } while(s == 1);
}

Citire = Читать Afisare= Показать Ultima Cifra = Последняя цифра числа Сортар = Пузырьковая сортировка

Ответы [ 12 ]

0 голосов
/ 08 ноября 2010

Если вы можете контролировать заполнение массива, возможно, вы могли бы добавить упорядоченные числа и затем выбрать первые 3 (то есть), в противном случае вы можете использовать двоичное дерево для выполнения поиска или просто использовать линейный поиск, как говорит Birryree ...

0 голосов
/ 08 ноября 2010

Я думаю, у вас есть выбор между сканированием вектора для трех самых больших элементов или его сортировкой (либо с помощью сортировки по вектору, либо путем копирования его в неявно отсортированный контейнер, такой как набор).

...