//fibbonachiho 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_fib_index(int* pole, int velkost, int hladany){
int fib_pole[MAX_DLZKA_FIB_RADU];
fib_pole[0]=0;
fib_pole[1]=1;
int index=1;
while(index < MAX_DLZKA_FIB_RADU && fib_pole[index] < velkost) {
index++;
fib_pole[index] = fib_pole[index-2] + fib_pole[index-1];
}
int i=fib_pole[index-1];
int p=fib_pole[index-2];
int q=fib_pole[index-3];
if (i==0) return -1;
while(true){
if (pole[i-1]==hladany) return i-1;
else if (pole[i-1] < hladany) {
if (p==1) return -1;
else {
i=i+q;
p=p-q;
q=q-p;
}
}
else {
if (q==0) return -1;
else {
i=i-q;
int t=p;
p=q;
q=t-q;
}
}
}
} |
//fibbonachiho 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_fib_bool(int* pole, int velkost, int hladany){
int fib_pole[MAX_DLZKA_FIB_RADU];
fib_pole[0]=0;
fib_pole[1]=1;
int index=1;
while(index < MAX_DLZKA_FIB_RADU && fib_pole[index] < velkost) {
index++;
fib_pole[index] = fib_pole[index-2] + fib_pole[index-1];
}
int i=fib_pole[index-1];
int p=fib_pole[index-2];
int q=fib_pole[index-3];
if (i==0) return false;
while(true){
if (pole[i-1]==hladany) return true;
else if (pole[i-1] < hladany) {
if (p==1) return false;
else {
i=i+q;
p=p-q;
q=q-p;
}
}
else {
if (q==0) return false;
else {
i=i-q;
int t=p;
p=q;
q=t-q;
}
}
}
} |