Advertisement
MeehoweCK

Untitled

Aug 23rd, 2018
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.93 KB | None | 0 0
  1. #include<iostream>
  2.  
  3. using namespace std;
  4.  
  5. int partition(int tablica[], int p, int r) // dzielimy tablice na dwie czesci, w pierwszej wszystkie liczby sa mniejsze badz rowne x, w drugiej wieksze lub rowne od x
  6. {
  7.     int x = tablica[p]; // obieramy x
  8.     int i = p, j = r, w; // i, j - indeksy w tabeli
  9.     while (true) // petla nieskonczona - wychodzimy z niej tylko przez return j
  10.     {
  11.         while (tablica[j] > x) // dopoki elementy sa wieksze od x
  12.             j--;
  13.         while (tablica[i] < x) // dopoki elementy sa mniejsze od x
  14.             i++;
  15.         if (i < j) // zamieniamy miejscami gdy i < j
  16.         {
  17.             w = tablica[i];
  18.             tablica[i] = tablica[j];
  19.             tablica[j] = w;
  20.             i++;
  21.             j--;
  22.         }
  23.         else // gdy i >= j zwracamy j jako punkt podzialu tablicy
  24.             return j;
  25.     }
  26. }
  27.  
  28. void quicksort(int tablica[], int p, int r) // sortowanie szybkie
  29. {
  30.     int q;
  31.     if (p < r)
  32.     {
  33.         q = partition(tablica,p,r); // dzielimy tablice na dwie czesci; q oznacza punkt podzialu
  34.         quicksort(tablica, p, q); // wywolujemy rekurencyjnie quicksort dla pierwszej czesci tablicy
  35.         quicksort(tablica, q+1, r); // wywolujemy rekurencyjnie quicksort dla drugiej czesci tablicy
  36.     }
  37. }
  38.  
  39. int main()
  40. {
  41.     int ilosc_liczb, i;
  42.     cout << "Podaj ilosc licz do posortowania: ";
  43.     cin >> ilosc_liczb;
  44.     int *tablica = new int [ilosc_liczb]; // utworzenie dynamicznej tablicy na 'ilosc_liczb' elementow
  45.  
  46.     for (i = 0; i < ilosc_liczb; i++) // wczytywanie liczb do tablicy
  47.     {
  48.         cout << "Podaj liczba: ";
  49.         cin >> tablica[i];
  50.     }
  51.  
  52.     quicksort(tablica,0,ilosc_liczb-1); // wywolanie funkcji sortujacej
  53.  
  54.     for (i = 0; i < ilosc_liczb; i++) // wypisanie posortowanej tablicy
  55.         cout << "tablica[" << i << "] = " << tablica[i] << endl;
  56.  
  57.     delete [] tablica; // zwolnienie tablicy zaalokowanej dynamicznie
  58.  
  59.     return 0;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement