Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- // nalezy olreslic kto zajal ktore miejsce w konkursie. Pierwsze miejsce zajmuje osoba z najwieksza liczba punktow
- // (jesli tyle samo to 2 pierwsze), a pozostale miejsca od najmniejszej liczby punctow - by wspierac humanistow ;)
- using namespace std;
- void sortowanie_quicksort (int *tab, int lewy, int prawy);
- int main() {
- int testy;
- cin >> testy;
- while (testy--){
- int liczba_uczestnikow;
- cin >> liczba_uczestnikow;
- int *wyniki;
- wyniki = new int[liczba_uczestnikow];
- for (int i = 0; i < liczba_uczestnikow; i++)
- cin >> wyniki[i];
- sortowanie_quicksort(wyniki, 0, liczba_uczestnikow - 1);
- if (wyniki[liczba_uczestnikow] == wyniki[liczba_uczestnikow - 1]){ // jesli ex equo
- cout << wyniki[liczba_uczestnikow] << " ";
- cout << wyniki[liczba_uczestnikow] << " ";
- liczba_uczestnikow -=2;
- }
- else {
- cout << wyniki[liczba_uczestnikow] << " "; // jesli tylko jedna osoba ma najwieksza liczbe pkt
- liczba_uczestnikow--;
- }
- for (int i = 0; i < liczba_uczestnikow; i++)
- cout << wyniki[i] << " ";
- cout << endl;
- delete [] wyniki;
- }
- return 0;
- }
- void sortowanie_quicksort (int *tab, int lewy, int prawy){
- // wybieramy os - dowolny punkt, moze byc pierwszy z lewej, a potem porownujemy
- // i mniejsze po lewej stronie, wieksze po prawej
- int v = tab[ (lewy + prawy) / 2];
- int i, j, x;
- i = lewy;
- j = prawy;
- do {
- while (tab[i] < v) i++;
- while (tab[j] > v) j++;
- if ( i <= j) {
- x = tab[i];
- tab[i] = tab[j];
- tab[j] = x;
- i++;
- j--;
- }
- } while (i <= j);
- if (j > lewy) sortowanie_quicksort(tab, lewy, prawy);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement