Implementácie

Binárne vyhµadávanie

 
 
//binarne vyhladavanie zadaneho prvku "hladany" pomocou cyklu while
//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_bin_cykl_index(int* pole, int velkost, int hladany){
	int lavy_o=0;
	int pravy_o=velkost-1;
	
	while(lavy_o <= pravy_o){
		int stred=(lavy_o + pravy_o)/2;
		if (pole[stred] < hladany) lavy_o=stred+1;
		else if (pole[stred] > hladany) pravy_o=stred-1;
		else return stred;
	}
	return -1;
}
 
//binarne vyhladavanie zadaneho prvku "hladany" pomocou cyklu while
//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_bin_cykl_bool(int* pole, int velkost, int hladany){
	int lavy_o=0;
	int pravy_o=velkost-1;
	
	while(lavy_o <= pravy_o){
		int stred=(lavy_o + pravy_o)/2;
		if (pole[stred] < hladany) lavy_o=stred+1;
		else if (pole[stred] > hladany) pravy_o=stred-1;
		else return true;
	}
	return false;
}
 
//binarne vyhladavanie zadaneho prvku "hladany" pomocou rekurzie
//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_bin_rek_index(int* pole, int lavy_o, int pravy_o, int hladany){
	while(lavy_o <= pravy_o){
		int stred=(lavy_o + pravy_o)/2;
		if (pole[stred] < hladany) 
			return najdi_bin_rek_index(pole, stred+1, pravy_o, hladany);
		else if (pole[stred] > hladany)
			return najdi_bin_rek_index(pole, lavy_o, stred-1, hladany);
		else return stred;
	}
	return -1;
}
 
//binarne vyhladavanie zadaneho prvku "hladany" pomocou rekurzie
//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_bin_rek_bool(int* pole, int lavy_o, int pravy_o, int hladany){
	while(lavy_o <= pravy_o){
		int stred=(lavy_o + pravy_o)/2;
		if (pole[stred] < hladany) 
			return najdi_bin_rek_bool(pole, stred+1, pravy_o, hladany);
		else if (pole[stred] > hladany) 
			return najdi_bin_rek_bool(pole, lavy_o, stred-1, hladany);
		else return true;
	}
	return false;
}