Yazarlar Sözlük Makaleler Yardım Masası Gözlük Forum İstatistik

Tüm Başlıklar XML

1.  n sayıda elemanı ortalama n*log n karşılaştırma ile sıralayan, bölüp yönetmek * suretiyle çalışan, başarılı bir sıralama algoritması.

Özetle şöyledir:
1. Listeden bir eleman al. (pivot)
2. Listede bu elemandan küçük olanları sola, büyük olanları sağa gönder. Böylece pivot doğru yerinde olmuş olur.
3. Rekürsif olarak sol ve sağ listelerde de bu işi yap.

PHP implementasyonu şöyledir :
function quicksort($seq)
{
    if(count($seq)>1)
    {
        $k = $seq[0];
        $x = array();
        $y = array();

        for($i=1; $i<count($seq); $i++)
            if($seq[$i] <= $k)
                $x[] = $seq[$i];
            else
                $y[] = $seq[$i];

        $x = quicksort($x);
        $y = quicksort($y);

        return array_merge($x, array($k), $y);
    } else {
        return $seq;
    }
}


Bkz. Sorting algorithms
fizikci
21 Ocak 2005 22:21 ~ 23 Kasım 2005 18:09
2.  .Net Framework'te kullanılan quick sort metodu. Bu metod Array sınıfının içinde private olarak tanımlanmış SorterObjectArray sınıfına ait. (Framework'ün tozlu raflarından yani. :)
public virtual void QuickSort(int left, int right)
{
    do
    {
        int num1 = left;
        int num2 = right;
        object obj1 = this.keys[(num1 + num2) >> 1];
        try
        {
        Label_0017:
            while (this.comparer.Compare(this.keys[num1], obj1) < 0)
            {
                num1++;
            }
            while (this.comparer.Compare(obj1, this.keys[num2]) < 0)
            {
                num2--;
            }
        }
        catch (IndexOutOfRangeException)
        {
            throw new ArgumentException(string.Format(Environment.GetResourceString("Arg_BogusIComparer"), obj1, obj1.GetType().Name, this.comparer));
        }
        catch (Exception exception1)
        {
            throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_IComparerFailed"), exception1);
        }
        if (num1 <= num2)
        {
            if (num1 < num2)
            {
                object obj2 = this.keys[num1];
                this.keys[num1] = this.keys[num2];
                this.keys[num2] = obj2;
                if (this.items != null)
                {
                    object obj3 = this.items[num1];
                    this.items[num1] = this.items[num2];
                    this.items[num2] = obj3;
                }
            }
            num1++;
            num2--;
            if (num1 <= num2)
            {
                goto Label_0017;
            }
        }
        if ((num2 - left) <= (right - num1))
        {
            if (left < num2)
            {
                this.QuickSort(left, num2);
            }
            left = num1;
        }
        else
        {
            if (num1 < right)
            {
                this.QuickSort(num1, right);
            }
            right = num2;
        }
    }
    while (left < right);
}

fizikci
23 Kasım 2005 17:54
Bu konuda bildiklerinizi bizlerle paylaşabilirsiniz
Tabi bunun için yazarsanız giriş yapmalı, yazar değilseniz yazar olmalısınız.


Bu başlığa bkz veren girişlerin başlıkları nedir?

Bu başlığa bkz veren girişler başka hangi başlıklara bkz verdiler?
© 2005, Bilişim Kulübü. (1140 ms)
Ne yapabilirsin: SubtitleClick ile İngilizceni Geliştir, Çınar Framework ile kod yaz, Eglencelik.org'ta biraz eğlen