Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Dizilerde Ortanca Değer İle Arama
#1
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.

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..
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  İkili Arama Ağacı (Binary Search Tree) narkotik 6 4.772 08-01-2019, Saat: 22:26
Son Yorum: malitutuncu
  Delphi Çift Yönlü Bağlı Liste Ekleme,Silme,Listeleme,Arama narkotik 0 1.719 26-11-2018, Saat: 22:05
Son Yorum: narkotik



Konuyu Okuyanlar: 1 Ziyaretçi