#include <stdio.h>
#include <stdlib.h>
int buscaTernaria(int size, int *arr, int num);
int main(){
int n = 10;
int v[] = {6,8,27,53,104,225,369,507,801,999};
int num = 801;
int pos = buscaTernaria(n, v, num);
if(pos
!= -1) printf("O número %d é elemento de índice %d do vetor", num
, pos
); else printf("Número não encontrado como elemento do vetor"); }
int buscaTernaria(int size, int *arr, int num){
int inicio = 0;
int fim = size-1;
while(inicio<=fim){
int terco_direito = inicio + (fim - inicio )/3;
int terco_esquerdo = fim - (fim - inicio )/3;
if (num == arr[terco_direito]) return terco_direito;
if (num == arr[terco_esquerdo]) return terco_esquerdo;
if (num < arr[terco_direito]){
fim = terco_direito - 1;
continue;
}
if (num > arr[terco_esquerdo]){
inicio = terco_esquerdo + 1;
continue;
}
inicio = terco_direito + 1;
fim = terco_esquerdo - 1;
}
return -1;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCmludCBidXNjYVRlcm5hcmlhKGludCBzaXplLCBpbnQgKmFyciwgaW50IG51bSk7CgppbnQgbWFpbigpewogICAgaW50IG4gPSAxMDsKICAgIGludCB2W10gPSB7Niw4LDI3LDUzLDEwNCwyMjUsMzY5LDUwNyw4MDEsOTk5fTsKICAgIGludCBudW0gPSA4MDE7CiAgICBpbnQgcG9zID0gYnVzY2FUZXJuYXJpYShuLCB2LCBudW0pOwogICAgaWYocG9zICE9IC0xKSBwcmludGYoIk8gbsO6bWVybyAlZCDDqSBlbGVtZW50byBkZSDDrW5kaWNlICVkIGRvIHZldG9yIiwgbnVtLCBwb3MpOwogICAgZWxzZSBwcmludGYoIk7Dum1lcm8gbsOjbyBlbmNvbnRyYWRvIGNvbW8gZWxlbWVudG8gZG8gdmV0b3IiKTsKfQoKaW50IGJ1c2NhVGVybmFyaWEoaW50IHNpemUsIGludCAqYXJyLCBpbnQgbnVtKXsKICAgIGludCBpbmljaW8gPSAwOwogICAgaW50IGZpbSA9IHNpemUtMTsKCiAgICB3aGlsZShpbmljaW88PWZpbSl7CiAgICAgIGludCB0ZXJjb19kaXJlaXRvID0gaW5pY2lvICsgKGZpbSAtIGluaWNpbyApLzM7CiAgICAgIGludCB0ZXJjb19lc3F1ZXJkbyA9IGZpbSAtIChmaW0gLSBpbmljaW8gKS8zOwogICAgICBpZiAobnVtID09IGFyclt0ZXJjb19kaXJlaXRvXSkgcmV0dXJuIHRlcmNvX2RpcmVpdG87CiAgICAgIGlmIChudW0gPT0gYXJyW3RlcmNvX2VzcXVlcmRvXSkgcmV0dXJuIHRlcmNvX2VzcXVlcmRvOwogICAgICBpZiAobnVtIDwgYXJyW3RlcmNvX2RpcmVpdG9dKXsKICAgICAgICBmaW0gPSB0ZXJjb19kaXJlaXRvIC0gMTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAobnVtID4gYXJyW3RlcmNvX2VzcXVlcmRvXSl7CiAgICAgICAgaW5pY2lvID0gdGVyY29fZXNxdWVyZG8gKyAxOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGluaWNpbyA9IHRlcmNvX2RpcmVpdG8gKyAxOwogICAgICBmaW0gPSB0ZXJjb19lc3F1ZXJkbyAtIDE7CiAgICB9CiAgICByZXR1cm4gLTE7Cn0=