Najlepiej nie będzie posortować wszystko, bo zabiera to dużo mocy obliczeniowej.
Niestety nie umiem wytłumaczyć tego kodu zrozum to sam:
#include <iostream> //wpisywanie
#include <time.h> //losowanie
#include <stdlib.h> //losowanie
#include <stdexcept> //bledy
using std::cout;
using std::endl;
using std::cin;
void znajdz(int *tab,const std::size_t rozmiar, int &max1, int &max2, int &max3)
{
if(rozmiar < 3)//jezeli tablica jest mnijesza od 3 elementow to daj blad
throw std::length_error("Rozmar tablicy musi byc wiekszy od 3!");
max1 = -2147483648;//daj najmniejsze mozliwe wartosci
max2 = -2147483648;//daj najmniejsze mozliwe wartosci
max3 = -2147483648;//daj najmniejsze mozliwe wartosci
for(std::size_t i = 0;i<rozmiar;i++)
{
//cout<<*tab<<endl; //wypisz wartosc jesli chcesz
if(max1 < *tab){
max3 = max2;
max2 = max1;
max1 = *tab;
}
else if(max2 < *tab){
max3 = max2;
max2 = *tab;
}
else if(max3 < *tab)
max3 = *tab;
tab++; //przesun wskaznik na nastepna liczbe
}
}
int main()
{
srand(time(NULL));
const std::size_t rozmiar = 10;
int tablica[rozmiar];
for(std::size_t i = 0;i<rozmiar;i++)
tablica[i] = rand()%100;//wpisz jakies smieci
int max1,max2,max3;//zmienne na wyniki
znajdz(&(tablica[0]),rozmiar,max1,max2,max3);//przypisz zmiennym wartosci
//pierwszy argument to wskaznik na pierwszy element w tablicy
cout<<"Najwieksze: "<<max1<<" : "<<max2<<" : "<<max3<<endl;//wypisz wynik
return 0;
}