Code: Zaznacz cały
#include<iostream>
#include <fstream>
using namespace std;
void quick_sort(int *tab, int lewy, int prawy)
{
if(prawy <= lewy) return;
int i = lewy - 1, j = prawy + 1,
pivot = tab[(lewy+prawy)/2]; //wybieramy punkt odniesienia
while(1)
{
//szukam elementu wiekszego lub rownego piwot stojacego
//po prawej stronie wartosci pivot
while(pivot>tab[++i]);
//szukam elementu mniejszego lub rownego pivot stojacego
//po lewej stronie wartosci pivot
while(pivot<tab[--j]);
//jesli liczniki sie nie minely to zamieñ elementy ze soba
//stojace po niewlasciwej stronie elementu pivot
if( i <= j)
//funkcja swap zamienia wartosciami tab[i] z tab[j]
swap(tab[i],tab[j]);
else
break;
}
if(j > lewy)
quick_sort(tab, lewy, j);
if(i < prawy)
quick_sort(tab, i, prawy);
}
int main()
{
int *tab, n, liczba,tmp = 0;
std::cout << "Wybierz sposob sortowania:\n";
std::cout << "1) Sortowanie poprzez wpisanie:\n";
std::cout << "2) Sortowanie z pliku:\n\n";
std::cin >> liczba;
switch( liczba )
{
case 1:
cout << "Wybrales sposob nr 1\n";
cout << "Prosze podac liczbe liczb do posortowania\n";
cin>>n;
tab = new int [n]; //przydzielenie pamiêci na elementy tablicy
//wczytanie liczb
cout << "Podaj liczby do posortowania \n";
for(int i=0;i<n;i++)
cin>>tab[i];
quick_sort(tab,0, n-1);
cout << "\n\nWynik posortowania \n";
for(int i=0;i<n;i++)
cout<<tab[i]<<" ";
cin.ignore();
cin.get();
break;
case 2:
cout << "Wybrales sposob nr 2\n";
cout << "UWAGA: Plik liczby.txt powinien znajdowac sie w \n";
cout << "tym samym folderze co progam\n";
ifstream liczby("liczby.txt");
if (!liczby)
{
cout << "Nie mozna otworzyc pliku";
getchar();
return 1;
}
while (!liczby.eof())
liczby >> tab[tmp++];
liczby.close();
n=tmp;
quick_sort(tab,0, n-1);
cout << "\n\nWynik posortowania \n";
for(int i=0;i<n;i++)
cout<<tab[i]<<" ";
cin.ignore();
cin.get();
break;
}
return 0;
}