#include <iostream>
using namespace std;
/* Deklaracje funkcji */
void zamien(int *, int *);
void quickSort(int *, int, int);
int main()
{
const int ile=7; //liczba elementow ktore bedziemy sortowac
int element[ile]; // tablica elementow do posortowania
cout <<"Wczytywanie danych...\n\n";
for (unsigned int i=0;i<ile;++i)
{
cout <<"Podaj "<<i+1<<" element: ";
cin >>element[i];
cin.ignore();
}
cout <<"\nElementy przed posortowaniem:\n\n";
for (unsigned int i=0;i<ile;++i)
cout <<element[i]<<' ';
cout <<"\n\n";
quickSort(element, 0, ile-1); //uruchomienie funkcji sortujacej
cout <<"Elementy posortowane:\n\n";
for (unsigned int i=0;i<ile;i++)
cout <<element[i]<<' ';
cout <<"\n\n";
cout <<"Nacisnij ENTER aby zakonczyc\n";
getchar();
return 0;
}
/*
Funkcja zamienia wartosci dwoch elementow. Mozna zastapic ja standardowa funkcja swap (z przestrzeni std) - zmieni sie tylko wywolanie funkcji
*/
void zamien(int *a, int *b)
{
int temp=*a;
*a=*b;
*b=temp;
}
/*
Funkcja realizujaca algorytm sortowania szybkiego. Przyjmuje jako argumenty wskaznik do tablicy elementow, indeks pierwszego elementu uznawanego za nalezacy do tablicy oraz indeks ostatniego elementu uznawanego za nalezacy do tablicy.
*/
void quickSort(int *tab, int lewo, int prawo)
{
if (lewo<prawo)
{
int k=lewo, p=tab[lewo];
for (unsigned int i=lewo+1;i<=prawo;++i)
if (tab[i]<=p)
{
++k;
zamien(&tab[i], &tab[k]); // lub swap (tab[i], tab[k]);
}
zamien(&tab[lewo], &tab[k]); // lub swap (tab[lewo], tab[k]);
quickSort(tab, lewo, k-1); //wywolanie dle lewej podtablicy
quickSort(tab, k+1, prawo); // wywolanie dla prawej podtablicy
}
}