|
Implementácie |
Interpolačné vyhµadávanie
|
|
|
//interpolacne vyhladavanie zadaneho prvku "hladany" medzi lavym "lavy_o"
//a pravym "pravy_o" okrajom zadaneho pola "pole", ktore musi byt usporiadane vzostupne
//(na zaciatku pola je prvok s najmensou hodnotou)
//funkcia vracia index zadaneho prvku v poli (v pripade neuspechu vyhladavania vracia -1)
int najdi_interpol_index(int* pole, int lavy_o, int pravy_o, int hladany){
while (pole[lavy_o] <= hladany && hladany <= pole[pravy_o]) {
float menovatel=(pole[pravy_o]-pole[lavy_o]);
if (menovatel==0) {
if (pole[lavy_o]==hladany) return lavy_o;
else return -1;
}
int stred = lavy_o + (hladany - pole[lavy_o]) * ((pravy_o-lavy_o) / menovatel);
if (pole[stred]==hladany) return stred;
else if (pole[stred] < hladany) lavy_o=stred+1;
else pravy_o=stred-1;
}
return -1;
} |
|
//interpolacne vyhladavanie zadaneho prvku "hladany"
//pole "pole" s poctom prvkov "velkost" musi byt usporiadane vzostupne
//(na zaciatku pola je prvok s najmensou hodnotou)
//funkcia vracia index zadaneho prvku v poli (v pripade neuspechu vyhladavania vracia -1)
int najdi_interpol_index2(int* pole, int velkost, int hladany){
int lavy_o=0;
int pravy_o=velkost-1;
while (pole[lavy_o] <= hladany && hladany <= pole[pravy_o]) {
float menovatel=(pole[pravy_o]-pole[lavy_o]);
if (menovatel==0) {
if (pole[lavy_o]==hladany) return lavy_o;
else return -1;
}
int stred = lavy_o + (hladany - pole[lavy_o]) * ((pravy_o-lavy_o) / menovatel);
if (pole[stred]==hladany) return stred;
else if (pole[stred] < hladany) lavy_o=stred+1;
else pravy_o=stred-1;
}
return -1;
} |
|
//interpolacne vyhladavanie zadaneho prvku "hladany"
//pole "pole" s poctom prvkov "velkost" musi byt usporiadane vzostupne
//(na zaciatku pola je prvok s najmensou hodnotou)
//funkcia vracia logicku premennu (ak sa zadany prvok v poli nachadza true, inak false)
bool najdi_interpol_bool(int* pole, int lavy_o, int pravy_o, int hladany){
while ( pole[lavy_o] <= hladany && hladany <= pole[pravy_o]) {
float menovatel=(pole[pravy_o]-pole[lavy_o]);
if (menovatel==0) {
if (pole[lavy_o]==hladany) return true;
else return false;
}
int stred = lavy_o + (hladany - pole[lavy_o]) * ((pravy_o-lavy_o) / menovatel);
if (pole[stred]==hladany) return true;
else if (pole[stred] < hladany) lavy_o=stred+1;
else pravy_o=stred-1;
}
return false;
} |
|