Pergunta sincera, querendo aprender e entender também, e se nums tiver um length ímpar, temos que corrigir para o número par inferior mais próximo? entendo que se o length for 7 e dividir por 2, o retorno será 3,5 e não existem indices float, correto? sei que o intuito do post é o raciocínio en torno do algoritmo e não algo tão pequeno como esse ponto que eu trouxe.
Em resposta a Apanhando para uma busca binária por 1h
1
1
Acredito que esteja se referindo ao primeiro exemplo.
Se length = 7, os índices do array serão de 0 à 6: [0,1,2,3,4,5,6]. Assim, o elemento do meio é o 3.
Então se o resultado da divisão for um número fracionado, devemos arredondar para baixo.
O exemplo que mostrei é na linguagem Rust, e especificamente nela (e algumas outras) a divisão de dois inteiros resulta em um inteiro.
Ou seja, ele faz a divisão, guarda o quociente e joga o resto fora. Se eu quisesse a resposta exata, teria que fazer algo como:
let mid = length as f64 / 2 as f64;
println!("{}", mid); // mid = 3.5
Outra forma seria:
let length: f64 = 7; // Declarar a variável como float desde o início
let mid = length / 2.0;
println!("{}", mid); // mid = 3.5
Espero que tenha sido útil. :)
1
Compreendi, muito obrigado, a resposta estava na tipagem do dado que ele espera.