QuickSort
unknown
c_cpp
3 years ago
2.1 kB
4
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...