Cüce sıralama algoritmasının çalışma mantığı; İlk elemanı seçer sonrakiyle karşılaştırır (küçük veya büyüğe) sıralamaya göre yer değiştirir. Sonra ondan önceki eleman varsa bir öncekiyle karşılaştırır. Yer değiştirmezse tekrar kaldığı elemandan aynı şekilde devam eder.


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

İlk önce birinci eleman seçilir. Sonraki elemanla karşılaştırılır.
3-5’den küçük olduğu için yer değiştirir. Birinci elemandan önce eleman olmadığı için ikinci eleman seçilir.

1-5’den küçük olduğu için yer değiştirir. Önceki elemanlar olduğu için son eleman işaretlenir. Önceki elemanlar karşılaştırılır.

1-3’den küçük olduğu için yer değiştirir. Bakılacak eleman kalmadığı için işaretlenen eleman ve sonraki eleman karşılaştırılır.

10-5’den küçük olmadığı için yer değiştirilmez. Diğer eleman seçilir ve karşılaştırılır.

7-10’dan küçük olduğu için yer değiştirir. ve son karşılaştırılan eleman işaretlenir. 7 olan elaman önceki elemanla karşılaştırılır.
7-5’den küçük olmadığı için işaretlenen eleman sonda olduğunda sıralama işlemi tamamlanır.
Özet olarak bir eleman sonraki elemanla karşılaştırılır. Yer değiştirilirse; önceki elemanlar yer değiştirilene kadar bakılır. Yer değiştirme olmadığı zaman dizide kalınan son elemandan devam edilir.


scription">HTML-Kodu:
void Main(){    int[] d = Gnome_Sort(new int[] {5, 3, 1, 10, 7});    for (int i = 0; i < d.Length; i++){        Console.Write(d[i] + " ");    }    Console.ReadKey();}int[] Gnome_Sort(int[] dizi){    int i = 0, j = 1;    while (i < dizi.Length - 1 ) {        if (i == -1)            i = j;        if (dizi[i + 1] > dizi[i])            i = j++;        else {            int temp = dizi[i];            dizi[i] = dizi[i + 1];            dizi[i + 1] = temp;            i--;        }    }    return dizi;}

Proje dosyasını buradan indirebilirsiniz.


description">HTML-Kodu:
$d = Gnome_Sort(array(5, 3, 1, 10, 7));for ($i = 0; $i < count($d); $i++){    echo $d[$i] . ' ';}function Gnome_Sort($dizi){    $i = 0; $j = 1;        while ($i < count($dizi) - 1 ) {        if ($i == -1)            $i = $j;        if ($dizi[$i + 1] > $dizi[$i])            $i = $j++;        else {            $temp = $dizi[$i];            $dizi[$i] = $dizi[$i + 1];            $dizi[$i + 1] = $temp;            $i--;        }    }    return $dizi;}

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