Comb Sort (Tarak Sıralama) Algoritması

Selamün Aleyküm Arkadaşlar;

Tarak sıralama algoritması kabarcık sıralama (Bubble Sort) algoritmasının geliştirilmiş halidir. Kabarcık sıralama algoritmasında ardışık olarak karşılaştırılır. Tarak sıralamasında ise aralarında 1’den fazla boşluk olabilir.

Şöyle bir dizimiz olsun. Küçükten büyüğe doğru sıralayalım.

SnapCrab_No-0062

 

İlk önce dizinin boyutu 1,3’e bölünür. Bölünen kısmın tam kısmı alınır.  5/1,3 = 3,8. Tam kısmı 3.

İlk eleman seçilir ve üç fazlası olan eleman karşılaştırılır.

SnapCrab_No-0063

Sonra ikinci eleman seçilir ve +3 fazlası olan eleman karşılaştırılır.

SnapCrab_No-0064

Sonra üçüncü eleman seçilir. +3 fazlası dizinin uzunluğunu aştığı için işlem yapılamaz. Boşluk sayısı tekrar 1,3’e bölünür ve tam kısmı alınır. 3 / 1,3 = 2,3 Tam kısmı 2 olarak alınır. Birinci eleman seçilir ve +2 fazla elemanla karşılaştırılır.

SnapCrab_No-0065

İkinci eleman seçilir ve +2 fazlası olan elemanla karşılaştırılır. Sonra diğer elemanlar seçilip +2 fazlası elemanlar dizinin sonuna kadar karşılaştırılır.

SnapCrab_No-0067SnapCrab_No-0068

Dizinin sonuna geldiğinde tekrar boşluk sayısı 1,3’e bölünür. 2 / 1,3 = 1,5 tam kısmı alınır 1. Birinci eleman seçilir ve 1 fazlası yani sonraki elemanla karşılaştırılır. Sonra ikinci eleman sonraki elemanla. Diğer elemanlarda bir sonraki elemanlarla karşılaştırılır.

SnapCrab_No-0069SnapCrab_No-0070SnapCrab_No-0071SnapCrab_No-0072

 

Sonunda dizimiz sıralanmış olur.

C#

void Main()
{
    int[] d = CombSort(new int[] {4, 10, 1, 6, 7 });
    for (int i = 0; i < d.Length; i++){
        Console.Write(d[i] + " ");
    }
    Console.ReadKey();
}

int[] CombSort(int[] dizi) {
    int bosluk = dizi.Length;
    bool degisti = false;
    while (bosluk > 1 || degisti) {
        if(bosluk > 1)
            bosluk =(int) ((float) bosluk / 1.3f);

        degisti = false;

        for (int i = 0; i + bosluk < dizi.Length; i++){
            if (dizi[i + bosluk] < dizi[i]) {
                int temp = dizi[i + bosluk];
                dizi[i + bosluk] = dizi[i];
                dizi[i] = temp;
                degisti = true;
            }
        }
    }
    
    return dizi;
}

Proje dosyasını buradan indirebilirsiniz.

 

PHP

$d = CombSort(array(4, 10, 1, 6, 7));
for ($i = 0; $i < count($d); $i++){
    echo $d[$i] . ' ';
}

function CombSort($dizi) {
    $bosluk = count($dizi);
    $degisti = false;
    while ($bosluk > 1 || $degisti) {
        if($bosluk > 1)
            $bosluk = intval($bosluk / 1.3);

        $degisti = false;

        for ($i = 0; $i + $bosluk < count($dizi); $i++){
            if ($dizi[$i + $bosluk] < $dizi[$i]) {
                $temp = $dizi[$i + $bosluk];
                $dizi[$i + $bosluk] = $dizi[$i];
                $dizi[$i] = $temp;
                $degisti = true;
            }
        }
    }
    
    return $dizi;
}

 

Hayırlı günler, sağlıcakla kalın.

Bu döküman www.ibasoglu.com’a aittir. Kaynak belirtmek suretiyle alıntı yapılabilir.