Advertisement
Guest User

Untitled

a guest
Mar 2nd, 2018
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.89 KB | None | 0 0
  1. #include <iostream>
  2. // nalezy olreslic kto zajal ktore miejsce w konkursie. Pierwsze miejsce zajmuje osoba z najwieksza liczba punktow
  3. // (jesli tyle samo to 2 pierwsze), a pozostale miejsca od najmniejszej liczby punctow - by wspierac humanistow ;)
  4. using namespace std;
  5.  
  6. void sortowanie_quicksort (int *tab, int lewy, int prawy);
  7.  
  8. int main() {
  9.     int testy;
  10.     cin >> testy;
  11.  
  12.  
  13.     while (testy--){
  14.         int liczba_uczestnikow;
  15.         cin >> liczba_uczestnikow;
  16.  
  17.         int *wyniki;
  18.         wyniki = new int[liczba_uczestnikow];
  19.  
  20.         for (int i = 0; i < liczba_uczestnikow; i++)
  21.             cin >> wyniki[i];
  22.  
  23.         sortowanie_quicksort(wyniki, 0, liczba_uczestnikow - 1);
  24.  
  25.         if (wyniki[liczba_uczestnikow] == wyniki[liczba_uczestnikow - 1]){      // jesli ex equo
  26.             cout << wyniki[liczba_uczestnikow] << " ";
  27.             cout << wyniki[liczba_uczestnikow] << " ";
  28.             liczba_uczestnikow -=2;
  29.         }
  30.         else {
  31.             cout << wyniki[liczba_uczestnikow] << " ";              // jesli tylko jedna osoba ma najwieksza liczbe pkt
  32.             liczba_uczestnikow--;
  33.         }
  34.  
  35.         for (int i = 0; i < liczba_uczestnikow; i++)
  36.             cout << wyniki[i] << " ";
  37.  
  38.         cout << endl;
  39.         delete [] wyniki;
  40.     }
  41.     return 0;
  42. }
  43.  
  44.  
  45. void sortowanie_quicksort (int *tab, int lewy, int prawy){
  46.     // wybieramy os - dowolny punkt, moze byc pierwszy z lewej, a potem porownujemy
  47.     // i mniejsze po lewej stronie, wieksze po prawej
  48.  
  49.     int  v = tab[ (lewy + prawy) / 2];
  50.     int i, j, x;
  51.     i = lewy;
  52.     j = prawy;
  53.  
  54.     do {
  55.         while (tab[i] < v) i++;
  56.         while (tab[j] > v) j++;
  57.         if ( i <= j) {
  58.             x = tab[i];
  59.             tab[i] = tab[j];
  60.             tab[j] = x;
  61.             i++;
  62.             j--;
  63.         }
  64.     } while (i <= j);
  65.  
  66.     if (j > lewy) sortowanie_quicksort(tab, lewy, prawy);
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement