QuickSort
unknown
c_cpp
3 years ago
2.1 kB
7
Indexable
#include<fstream>
#include <string.h>
#include<iostream>
using namespace std;
struct TOsoba
{
long datum;
char meno[16], priezvisko[16], adresa[31];
};
//Porovnavacia funkcia dvoch pacientov ulozenych v strukturovych premennych, ktora je pouzita vo
//funkcii ‘QuickSort’.
//Funkcia ‘PorovnajOsoby’ porovna dvoch pacientov najskor podla ich priezvisk, ak ich maju zhodne,
//tak potom podla ich mien, ak aj tie maju zhodne tak ich potom porovna podla datumov ich vysetreni.
int PorovnajOsoby(TOsoba *o1, TOsoba *o2)
{
int porovnanie = strcmp(o1->priezvisko, o2->priezvisko);
if (porovnanie != 0)
return porovnanie;
porovnanie = strcmp(o1->meno, o2->meno);
if (porovnanie != 0)
return porovnanie;
if (o1->datum < o2->datum)
return -1;
if (o1->datum > o2->datum)
return 1;
return 0;
}
void QuickSort(TOsoba **pole, long lavy, long pravy)
{
if(lavy < pravy)
{
long a = lavy, b = pravy;
TOsoba *stredny_prvok = pole[(lavy + pravy) / 2];
do
{
while (PorovnajOsoby(pole[a], stredny_prvok) < 0) a++;
while (PorovnajOsoby(stredny_prvok, pole[b]) < 0) b--;
if (a <= b)
{
TOsoba *t = pole[a];
pole[a] = pole[b];
pole[b] = t;
a++; b--;
}
}while (a <= b);
QuickSort(pole, lavy, b);
QuickSort(pole, a, pravy);
}
}
int main()
{
TOsoba **osoby = new TOsoba*[1000];
int i = 0, pocet;
ifstream in;
in.open("pacienti.txt");
if( !in )
{
cout<<"Subor sa nepodarilo otvorit";
return 0;
}
while( !in.eof() )
{
osoby[i] = new TOsoba;
in >> osoby[i]->datum >> osoby[i]->meno >> osoby[i]->priezvisko;
in.getline(osoby[i]->adresa, 30);
i++;
}
pocet = i-1;
cout << "v zozname " << (2 <= pocet && pocet <= 4 ? "su " : "je ");
cout << pocet << " vysetrenia nasledovnych pacientov";
cout << ":\n";
QuickSort(osoby, 0, pocet - 1);
for (i = 0; i < pocet; i++)
{
cout << osoby[i]->datum << ' ' << osoby[i]->meno << ' '
<< osoby[i]->priezvisko << osoby[i]->adresa << endl;
delete osoby[i];
}
delete osoby[pocet];
delete[] osoby;
return 0;
}
Editor is loading...