====== Logaritmikus keresés tétele ====== **Általános feladat**: N elemű rendezett sorozat; egy keresett elem (X). Szerepel-e a keresett elem a sorozatban és ha igen, akkor mi a sorszáma. Kihasználjuk, hogy a sorozat rendezett, így el tudjuk dönteni, hogy a keresett elem az éppen vizsgált elemhez képest hol helyezkedik el.\\ Al, F: intervallum alsó és felső végpontjai. Eljárás: Al := 1 F := N Ciklus K := INT((Al + F) / 2) Ha A(K) < X akkor Al := K + 1 Ha A(K) > X akkor F := K - 1 amíg Al <= F és A(K) != X (amíg Al > F vagy A(K) = X) Ciklus vége VAN := Al <= F Ha VAN akkor SORSZ := K Eljárás vége. **Megjegyzés:** azért hívják logaritmikus keresésnek, mert a ciklus lépésszáma kb. log N sokkal hatékonyabb rendezett sorozatra, mint a lineáris keresés. Pascal forráskód program binaris_logaritmikus_kereses; const n = 10; var a: array [1..n] of integer; i, j, c, x, als, fel, k: integer; van: boolean; begin randomize; //A tömb elkészítése for i:=1 to n do a[i]:=random(9); //Tömb rendezése for i:=1 to n-1 do for j:=i+1 to n do if a[j]x then fel:=k-1; until (als>fel) or (a[k]=x); van:=als<=fel; if van then writeln('megtalaltam, a sorszama: ', k) else writeln('nincsen meg'); readln; end. [[https://ideone.com/u5EiEy | A forráskódjának futtatása online ]] Órai gyakorlat program logaritmikus_kereses; const n=8; var i,j,al,fel,keresendo,koz, cs : integer; van:boolean; a: array [1..n] of integer; begin writeln('Kerem a tomb elemeit: '); for i:=1 to n do begin write('a[',i,'] = '); readln(a[i]); end; for i:=1 to n-1 do for j:=i+1 to n do if a[j]keresendo then fel:=koz-1; until (al>fel) or (a[koz]=keresendo); van := al<=fel; if van then write('Megvan, sorszama: ',koz)else write('Nincs meg'); readln; end.