Witam,
mam problem z zakodowaniem algorytmu magicznych piątek w języku C++. Znalazłem taki pseudokod z objaśnieniami http://inf.ug.edu.pl/~wpawlowski/08-09/asd-b/sel.html nic lepszego i bardziej szczegółowego nie udało mi się znaleźć. Ale mam kilka pytań co do niego. Jestem w trakcie pisania oto co udało mi się napisać do tej pory (problemy napisałem w komentarzach w kodzie):
bool porownaj(const osoba &a, const osoba &b){
int leks;
if(a.pesel < b.pesel) return true;
else if(a.pesel == b.pesel){
leks = a.nazwisko.compare(b.nazwisko);
if(leks > 0) return false;
else if(leks < 0) return true;
else{
leks = a.imie.compare(b.imie);
if(leks > 0) return false;
else if(leks < 0) return true;
}
}
else return false;
}
osoba magicznepiatki(vector <osoba> tab, int n, int k){
osoba m5;
vector <osoba> M;
if(n<11){
sort(tab.begin(), tab.end(), porownaj);
return tab[k];
}
else{
vector < vector<osoba> > piec;
piec.resize(n/5);
for (int i = 0; i < n; i++){//narazie zakładam że n jest podzielne przez 5, dla nie podzielnych kodu jeszcze nie ma;)
piec[i/5].push_back(tab[i]);
if(piec[i/5].size() == 5){
sort(piec[i/5].begin(), piec[i/5].end(), porownaj);
M.push_back(piec[i/5][2]);
}
}
m5 = magicznepiatki(M, M.size()-1, M.size()/2);// nie rozumiem z pseudokodu jak wyliczany parametr k jest
vector <osoba> tabm, tabr, tabw;//mniejsze, równe, większe bo z tego co mi się wydaje to muszę zrobić takie tablice
for (int i = 0; i < n; i++){
if(porownaj(tab[i], m5))
tabm.push_back(tab[i]);
else if(porownaj(m5, tab[i]))
tabw.push_back(tab[i]);
else
tabr.push_back(tab[i]);
}
if()//tu się zatrzymałem nie wiem czy da się użyć do porównania komparatora, żeby nie pisać przeciążania operatorów. Nie wiem też ja dokładnie co mam porównać, jakikolwiek element tablicy z parametrem k?
}
}
Dzięki z góry za pomoc;)