Commodore sayı 70, sayfa 15
Sayfanın metni

Sayfa 15

Kabarcık Sıralama

Kabarcık sistemi, sıralama metodlarının en çok bilinenidir. Ancak bu programı bile yanlış hazırlayıp süreyi uzatmak mümkündür. Bu sistem nasıl çalışır? Kabarcık sıralama en çok bilinen sistem olmasının yanında en kolay algoritmaya da sahiptir. Program adımları şöyle özetlenebilir: 1. Data grubu içinden en yüksek olanı bul.

2. En büyük elemanı ilk elemanla değiştir. 3. Elemanlar istenen sıraya girene kadar 1. ve 2. adımları tekrarla. Programlar genel olarak biri diğerinin içinde yer alan iki FOR-NEXT döngüsünden oluşur. Dış döngü birden başlar ve sıralanacak data sayısından bir düşüğe kadar gider. İç döngü ise, dış döngünün değerinin bir fazlasından başlar ve toplam değer sayısına kadar gider. Böylece küçük değerler yavaş yavaş data grubunun başına doğru giderler. Değerler su “kabarcıkları” gibi yükselir. Kabarcık sıralama basit ve kolay uygulanabilir olmasına rağmen büyük data grupları için çok yavaş kalır. Bunun sebebi de tüm grup içinden geçiş yapılması gerektiğidir. Bunu bir formül yardımıyla da anlayabiliriz. Program şu formda bir karar komutuna sahiptir:

IF — THEN ...

Bu komutun kaç defa işletileceği şu formülle anlaşılabilir: (n-1)+(n-2)+...+2+1 = n(n-1) / 2 = k (karşılaştırma) Başka bir deyişle bu komutun işlenme sayısı sıralanacak grup elemanlarının (n) karesine bağlı olarak artar. Ancak bir süre sonra bu komuta ihtiyacımızın kalmadığını göreceksiniz. Basit bir kabarcık sıralama programı şöyledir:

30000 REM 30010 REM ***KABARCIK SIRALAMA RUTİNİ*** 30020 REM 30030 FOR I-İ TO N-İ 30040 ::FOR J-İ41 TON 30050 ::::1F — X(J) THEN 30090 30060 ::::B — X() 30070 ::::X(D) — 30080 ::::X()) — B 30090 ::NEXT J 30100 NEXT I 30110 RETURN

Daha önce bahsettiğimiz satırı değiştirecek kabarcık sıralamayı biraz geliştirelim. Böylece değiştirdiğimiz program şu hale gelir:

30000 REM 30003 REM ***GELİŞTİRİLMİŞ KABARCIK SIRALAMA RUTİNİ*** 30006 REM

30010 FORI-1 30020 ::B - | 30030 ::FOR J-İ41 TON

30040 — X(J) THEN 30060 30050 ::::B — : J 30060 J 30070 ::X(K) — 30080 ::X() - B 30090 NEXT I

30100 RETURN

Bu rutin de ilk örnekteki “değiştirerek sıralama” sistemine dayanır. 30040. satırdaki karşılaştırma komutu değiştirilerek sıralamanın yönü de (artan veya azalan) ayarlanabilir. İyi de niye ikinci program daha hızlı? Bu cevabı, ikinci versiyonda dış döngüde sadece bir X değiştirilmesi yapılmasıdır. Rutin bu değerin daha önce değiştirilip değiştirilmediğini kontrol eder, bunun için de geçici B değişkeni kullanılmaktadır. Böylece toplam işlem

Klavyeyle gezinmek için ← ve → tuşları.