Günlük Hayatımızda Matematik

Quicksort Yani Hızlı Sıralama Algoritmasını Kolayca Anlayalım!

Sıralama, bilgisayarların yaptığı en temel eylemdir. Aslında birçok yönden bilgisayarların yaratılma nedenidir. Sıralama denince de akla modası yıllardır geçmeyen Quicksort Algoritması gelecektir.

hızlı sıralama algoritması

Çevrimiçi alışverişlerinizde bir şeyler satın alırken, genellikle aradığınız ürünleri fiyat, ortalama müşteri memnuniyet puanı veya belki de tarihe göre sipariş etme seçeneğine sahip olursunuz. Düşünürseniz alışveriş yaptığınız ortamda binlerce ürün vardır. Oysa ki bir sürü şeyi (örneğin rafınızdaki kitaplar) düzene koymayı denediyseniz, bunun zaman alacağını bilirsiniz. Bu nedenle dünya bir sıralama algoritması olan Quicksort algoritmasını icat ettiği için bilgisayar bilimcisi Tony Hoare’ye büyük bir şükran borçludur.

İşin ilginç olanı Hoare, Quicksort algoritmasını çevrimiçi alışveriş yapmayı düşünmeden, bu tip bir alışverişin henüz daha farkında olmadığımız zamanlarda geliştirdi. Ancak yine de onun geliştirdiği bu algoritma günümüzün en iyi sıralama algoritmalarından biri olarak kabul edilmektedir.

Quicksort Algoritması İle Nasıl Tanıştık?

Aşağıda bir örneğini gördüğünüz kabarcık sıralaması ( Bubble Sort) basit bir sıralama algoritmasıdır. Kabarcık sıralaması adını, tıpkı baloncukların yüzeye çıkması gibi listenizdeki şeylerin yavaş yavaş doğru yerlerine doğru hareket etmesinden alır. Arkasındaki fikir basittir. Karışık halde duran kitaplarınızı alfabetik bir şekilde sıralamak istediğinizi düşünün. Yapmanız gereken şey sıralı olmayan çiftleri aramak ve bunları düzenlemek olurdu. Sırası yanlış olan bir çift bulamadığınızda da işiniz biterdi.

Quicksort Algoritması
Kabarcık Sıralaması.

Bu algoritma da aynı mantıkla çalışır. Size bir sıraya konması gereken (örneğin sayılar) bir liste verildiğinde (örneğin artan sıralama), önce ilk iki öğeyi karşılaştırır ve doğru sırada değilse bunları değiştirirsiniz. Sonrasında ise sahip olduğunuz listede, ikinci ve üçüncü şeye bakar ve yanlış sıradaysa bunları değiştirirsiniz. Listenizin sonuna ulaşana kadar listede üçüncü ve dördüncü sırada, listede dördüncü ve beşinci sıradakileri aynı biçimde değiştirmeye devam edersiniz.

Bu işlem sırasında hiçbir şeyi değiştirmek zorunda kalmadıysanız işiniz tamamdır. Bu, listenin zaten doğru sırada olduğu anlamına gelir. Bunun sonucunda da artık durmanız gerekecektir. Ancak en az bir çifti değiştirmek zorunda kaldıysanız, aynı işlemi listenin başından itibaren yeniden başlatırsınız. Sonunda listeniz sıralanacaktır.

Sir Charles Antony Richard Hoare (d. 11 Ocak 1934), Britanyalı bilgisayar bilimcisi.

Sizin de fark edeceğiniz gibi fikir basit ama çok da etkili değildir. Sizin ( daha doğrusu algoritmanın çalıştığı bilgisayarın) bir listenin tamamının sıralanması için gereken zaman, listenin uzunluğu ile ilişkilidir. Tony Hoare’nın işin içine girdiği yerde burasıdır. Bubble Sort algoritmasını daha verimli kılmak için yaptığı çalışmalar sonucunda, Quicksort algoritması doğacaktı.

Quicksort Yani Hızlı Sıralama Algoritması Nasıl Çalışır?

Bu algoritma, az önce anlattığımız sıralama algoritması kadar basit olmasa da arka planındaki fikir güzel ve zariftir. Diyelim ki elimizde artan biçimde sıraya konması gereken bir sayılar listesi var. Böyle bir sayı listesi verildiğinde, önce listenizden bir sayı seçersiniz. Buna pivot sayı denir. Sonrasında da listedeki diğer tüm sayıları bu sayıyla karşılaştırırsınız.

Genel fikir, tüm sayıları kontrol etmek ve pivottan daha küçüklerse, artan sırada dizdiğimiz için, pivotun önüne taşımaktır. Aşağıdaki örnekte pivot sayımız yedidir. Bu mantıkla düzenledikten sonra yedi sayısının sol tarafındakiler daha küçük, sağ tarafındakiler ise daha büyük olacaktır.

Quicksort Yani Hızlı Sıralama Algoritmasını Kolayca Anlayalım!
Örneğimizde seçtiğimiz sayı 7 biçimindedir. Sol tarafındakiler daha küçük, sağ tarafındakiler ise daha büyük olacak biçimde sıralanmıştır.

Ancak sizin de fark ettiğiniz gibi sayılar hala düzenli değil. Bu durumda, aynı işlemi listenin daha küçük kısmına ve daha büyük kısmına ayrı ayrı uygulamanız gerekecektir. Yani önce yediden küçükler için bir pivot sayı seçersiniz ve ona göre sıralarsınız. Sonrasında da aynı işlemi yediden büyükler için de yaparsınız. Aşağıdaki örnekte bunun için 4 ve 9 seçilmiştir. Bu işlemin sonucunda sayı diziniz sıralanmış olur.

Quicksort Yani Hızlı Sıralama Algoritmasını Kolayca Anlayalım!
Sol taraftaki sayılar için 4, sağ taraftaki sayılar için ise 9 sayısı pivot sayı olarak seçilmiştir. Sonrasında da sayılar kendi içlerinde küçükten büyüğe sıralanmıştır.

Hoare’nin Hızlı Sıralama Algoritması İçin Harika Fikri

Ancak bilgisayar konusunda deneyimliyseniz, bu sıralamanın aslında küçükler ve büyükler biçiminde iki liste oluşturduğunuz ve bir bilgisayarın çalışma verimliliğini düşürdüğünü fark edeceksiniz. Bunun için bu bölünmeyi ek listelere ihtiyaç duymadan yapmak gerekir. Neyse ki Hoare’nin bunun için de harika bir fikri vardı.

Şimdi yine bir sayı dizisi düşünün ve bir sayıyı pivot olarak seçin. Bu sefer sol işaret parmağınızı pivotun sağındaki sayıya (ikinci sayı) ve sağ işaret parmağınızı son sayıya koyduğunuzu hayal edin. Amacınız pivota göre yanlış sırada olan sayı çiftlerini bulmak olacaktır. Sonrasında da listeyi hem soldan hem de sağdan tarayarak yerlerini değiştirmeniz gerekecektir.

Şimdi aşağıdaki görsele balın. L harfi sol, R harfi de sağ işaret parmağınızı gösteriyor. Bu aşamada pivot sayımızdan yani 7 sayısından, daha büyük sayıları arıyoruz. Sol taraftaki sayı yani 4, pivot sayımız yani 7’den küçük. Bu durumda sol parmağınızı bir sayı sağa doğru kaydırın. Şimdi 6 sayısındasınız. Yine küçük. Bir kere daha sağa kaydırın. Bir sonraki sayı ise 9. Şimdi durun.

Quicksort Yani Hızlı Sıralama Algoritmasını Kolayca Anlayalım!

Sırada sağ parmağınız var. Buradaki sayı 10. Pivot sayımız olan 7’den daha küçük olanlara bakalım. 10 sayısı olmadı, bu durumda parmağınızı bir sayı sola kaydırın ve 3 sayısın da durun. Her iki parmağınız durduğunda, pivota göre yanlış sırada olan iki sayı belirlediniz. Şimdi bu sayıların yani 3 ile 9 sayısının yerlerini değiştirin.

Bu işlemin birkaç tekrarından sonra her iki parmak da durduğunda sıralamamız tamamlanır. Pivot, listedeki en küçük veya en büyük sayı olduğunda, tanımladığımız algoritmanın başının belaya girebileceğini unutmamalıyız. Ancak bununla başa çıkmanın da yolları vardır. Ancak bu yazının içinde kısa sürede tanımlayamayacağımız kadar karmaşıktır. Yine de merak ederseniz ayrıntılar için Wikipedia’ya bakın.

Sonuç Olarak;

Bu yazımızda en basit hali ile Quicksort yani Hızlı Sıralama algoritmasının çalışma mantığını en basit hali ile aktarmaya çalıştık. Elbette konu hakkında bilginizi geliştirmek için ek kaynaklardan öğrenmeye devam etmeniz gerekecektir. Bunun için aşağıdaki kaynaklar kısmımıza göz atabilirsiniz.

Ayrıca algoritmalar hakkında öğrenmeye devam etmek istiyorsanız Çalışma Kağıtlarını Ve Gardırobunuzu Düzenlemek İçin En İyi Algoritma Nedir? başlıklı yazımıza da göz atmanızı öneririz.


Kaynaklar ve ileri okumalar


Size Bir Mesajımız Var!

Matematiksel, 2015 yılından beri yayında olan ve Türkiye’de matematiğe karşı duyulan önyargıyı azaltmak ve ilgiyi arttırmak amacıyla kurulmuş bir platformdur. Sitemizde, öncelikli olarak matematik ile ilgili yazılar yer almaktadır. Ancak bilimin bütünsel yapısı itibari ile diğer bilim dalları ile ilgili konular da ilerleyen yıllarda sitemize dahil edilmiştir. Bu sitenin tek kazancı sizlere göstermek zorunda kaldığımız reklamlardır. Yüksek okunurluk düzeyine sahip bir web sitesi barındırmak ne yazık ki günümüzde oldukça masraflıdır. Bu konuda bizi anlayacağınızı umuyoruz. Ayrıca yazımızı paylaşarak veya Patreon üzerinden ufak bir bağış yaparak da büyümemize destek olabilirsiniz. Matematik ile kalalım, bilim ile kalalım.

Matematiksel

Sibel Çağlar

Merhabalar. Matematik öğretmeni olarak başladığım hayatıma 2016 yılında kurduğum matematiksel.org web sitesinde içerikler üreterek devam ediyorum. Matematiğin aydınlık yüzünü paylaşıyorum. Amacım matematiğin hayattan kopuk olmadığını kanıtlamaktı. Devamında ekip arkadaşlarımın da dahil olması ile kocaman bir aile olduk. Amacımıza da kısmen ulaştık. Yolumuz daha uzun ama kesinlikle çok keyifli.

Bir yanıt yazın

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

Başa dön tuşu