Alıntı (erdem):
> Ancak benim yazdığımda bir hata var ;-) Bir kaç kere denerseniz göreceksiniz.
Evet, kodlar çok benzer olduğu için dikkat etmemişim, şimdi tekrar baktım da şu bloktan kaynaklanan bir durum;
if (sayi > dizi[i]) {
dizi ~= sayi;
break;
}
Burada sayı dizi elemanından büyükse sayıyı dizinin sonuna ekleyip işlemi bitiriyorsun, hata bundan kaynaklanıyor.
Alıntı (acehreli):
> Bu çalışmanın amacı şu: dizi bağlı listeden çok daha hızlı çıkıyor. Bunun nedeni de dizide elemanların yan yana bulunmaları ve bu yüzden de elemanların çoğunlukla mikro işlemcinin ara belleğinde durabilmeleri. Bağlı listede ise her bir düğüm dinamik olarak ayrıldığından mikro işlemci düğüm göstergelerini takip ederken sürekli olarak ana belleğe erişmek zorunda kalıyor ve çok daha yavaş oluyor.
Ali en sonda yapılacak açıklamayı en başta yapmışsın :) Tamda bu işe ısınmaya başlamıştık, keşke biraz daha bekleyip doğru soruları sormaya başladığımızda bu açıklama gelseydi. Gerçi biz bu hızla iki haftada kodu ancak yazabilirdik :-D ama yinede oldukça keyifli oluyordu.
Neyse bende ekleme ve sıralama metodunu ilk başta Erdem gibi düşünmüştüm, daha sonra Salih'in kodlarınıda inceleyince biraz daha farklı bir bakış açısı geliştirdim ve algoritmamı iki basamaklı bir hale getirdim. Yani ilk basamakta sadece sayıyı yerleştirecek konumu bulmaya odaklandım, konumu bulduktan sonra ise o konuma sayıyı yerleştirdim. Ortaya şöyle bir şey çıktı, ne dersiniz?
int[] SiraliElemanEkle2(int[] dizi, int deger)
{
int konum = 0;
// konumu bul
foreach (sira, eleman; dizi)
{
if (deger < eleman)
{
konum = sira;
break;
}
++konum;
}
// Ekle ve gönder
return (dizi[0 .. konum] ~ deger ~ dizi[konum .. $]);
}
Bu arada Salih'ten öğrendiğim time komutunu 99 değer için denediğimde çıktı şöyle oldu.
Alıntı:
> zafer@debian:~/DProje/SiraliArama/bin/Debug$ time ./SiraliArama
real 0m0.022s
user 0m0.008s
sys 0m0.004s
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]