Lisp Dili ile Kabarcık Sıralama

Merhaba arkadaşlar. Daha önce kabarcık sıralamaya değinmiştik. Bu yazımızda ise DrRacket ile bunun kodunu yazacağız. Önceki yazımı buradan okuyabilirsiniz.

Öncelikle kabarcık adında bir fonksiyon oluşturarak başlıyorum.

(define (kabarcik L) (if (empty? (rest L))L
                         (if (< (first L) (cadr L))
                             (cons (first L) (kabarcik (rest L)))
                             (cons (cadr L) (kabarcik (cons (first L) (cddr L))))
        )
    )
)

Burada car ve cdr fonksiyonlarının birleşimi ile oluşan cadr var. car ilk elemanı veriyordu bize. cdr ise ilk eleman hariç diğer elemanları veriyordu. Yani cdr+car= ikinci elemanı verir. cddr ise 2 cdr fonksiyonunun birleşimi ile oluşur. Yani 2 eleman hariç diğer elemanları bize verir.

Kodumuz da ise şunu diyoruz:

eğer listenin geri kalanı (rest L) boş ise kendisini yaz. Boş değilse alt satırdan devam..

eğer ilk eleman küçük ise ikinci elemandan, yeni bir liste oluştur(cons) ve oraya ilk elemanı yaz, kalan elemanlara tekrar kabarcık uygula.

eğer küçük değilse dizinin ikinci elemanını yeni bir liste oluştur ve oraya yaz. Daha sonra kabarcık fonksiyonuna kalan elemanları gönderiyoruz.

Şimdi Sıralama ve bubbleSort fonksiyonlarını yazalım. İlk yazdığımız sadece bir dönüş için karşılaştırma veriyordu. Şimbi bunu tüm elemanlar için yapıp fonksiyonumuzu çağıracağız.

(define (kabarcik L) (if (empty? (rest L))L
                         (if (< (first L) (cadr L))
                             (cons (first L) (kabarcik (rest L)))
                             (cons (cadr L) (kabarcik (cons (first L) (cddr L))))
        )
    )
)



(define (kabarcikSirala N L) ; N= Liste uzulunluğu L=Listemiz
  (cond ((= N 1) (kabarcik L))
        (else (kabarcikSirala (- N 1) (kabarcik L)))
        )
)



(define (bubbleSort L)
  (kabarcikSirala (length L) L) ; gelen listemizin uzunluğunu N parametresine gönderiyoruz. 
  )


(kabarcik '(6 10 4 8 7 1))

(bubbleSort '(6 10 4 8 7 1))

Kodumuzun son hali üstteki gibidir. Açıklama gereği duymuyorum zaten parametreleri alıp ilk oluşturduğumuz kabarcik fonksiyonuna gönderiyor. Çalışır hali de hemen aşağıda:

[the_ad id=”441″]

DrRacket Bubble Sort

Umarım faydalı olmuştur.

Bunlara Göz Atmak İsteyebilirsiniz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir