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;
}