14-01-2019, Saat: 23:58
Merhaba,
Dizilerde arama ile ilgili ufak bir dipnot düşeceğim, çok kullandığımız bir arama şekli değil ama genel kültür olarak köşede dursun. Sıralı aramalarda tercih edilebilir. En güzel yani çok basit oluşu. Çok büyük sayılarda ufacıkta olsa performans olarak daha iyi.
Kurallar;
Dizi elamanları sıralı olmalıdır.
Başlangıç için ;
ilk indis 0, Bitiş indisi Length(Dizi)-1 olmalıdır.
Her seferinde ortanca değer kontrol edilir. Aranan ortancadan büyükse başlangıç ortanca + 1 olur. Küçük ise Bitiş ortanca -1 olur.
Dizilerde arama ile ilgili ufak bir dipnot düşeceğim, çok kullandığımız bir arama şekli değil ama genel kültür olarak köşede dursun. Sıralı aramalarda tercih edilebilir. En güzel yani çok basit oluşu. Çok büyük sayılarda ufacıkta olsa performans olarak daha iyi.
Kurallar;
Dizi elamanları sıralı olmalıdır.
Başlangıç için ;
ilk indis 0, Bitiş indisi Length(Dizi)-1 olmalıdır.
Her seferinde ortanca değer kontrol edilir. Aranan ortancadan büyükse başlangıç ortanca + 1 olur. Küçük ise Bitiş ortanca -1 olur.
function SiraliIkiliArama(AAranan:Integer;const AArray:Array Of Integer):Boolean; Var xFirst,xLast,xMiddle:Integer; begin xFirst := 0; xLast := Length(AArray); while xLast >= xFirst do begin xMiddle := (xFirst+xLast) div 2; if AArray[xMiddle] = AAranan then Exit(True) else if AAranan < AArray[xMiddle] then xLast := Pred(xMiddle) else xFirst := Succ(xMiddle); end; end; function NormalAra(AAranan:Integer;const AArray:Array Of Integer):Boolean; Var Ind : Integer; begin for Ind := 0 to High(AArray) do if AArray[Ind] = AAranan then begin Result := True; Break; end; end; procedure TForm1.BtnAraClick(Sender: TObject); Var Zaman:TDateTime; begin Zaman := Now; if SiraliIkiliArama(StrToIntDef(Edit1.Text,0),Sirali_Array) then Memo1.Lines.Add('Buldum') else Memo1.Lines.Add('Bulamadım'); Memo1.Lines.Add(IntToStr(MilliSecondsBetween(now,Zaman))); Zaman := Now; if NormalAra(StrToIntDef(Edit1.Text,0),Sirali_Array) then Memo1.Lines.Add('Buldum') else Memo1.Lines.Add('Bulamadım'); Memo1.Lines.Add(IntToStr(MilliSecondsBetween(now,Zaman))); end;
Yalnızım ama bir kente yürüyen ordu gibiyim, edebiyattan kaçınmalıyım..