Kendi Geliştirdiğim Sıralama Algoritması

Life Hunter

Lapis Toplayıcısı
Mesajlar
930
En iyi cevaplar
0
Beğeniler
480
Puanları
980
Merhabalar, geçenlerde canım sıkıldı ve sektörde kullanılan ünlü sıralama algoritmaları dışında kendim bir algoritma geliştireyim dedim. Belki bu mantığı kullanan bir sıralama algoritması vardır ama ben araştırdığım kadarı ile göremedim siz biliyorsanız yazabilirsiniz. Tabi sektörde en çok kullanılan algoritmalar olan bubblesort ve ya quicksort kadar işlevsel değildir. Onlardan çok daha yavaş olabilir hız testi yapmadım. Ama yaptığı iş o algoritmalar ile aynı.
Algoritma:
Diyelimki elimizde bir dizi var ve bu dizi 3,7,2,6,8 elemanlarına sahip. Bizde bu elemanların yerlerini büyükten küçüğe olacak şekilde dizide değiştirmek isteyelim. Ben bu durum için her taramada en büyük sayıyı bulan bir mantık kullandım. Örneğin ilk taradığında en büyük sayınının 8 olduğunu görecek ve onu başa atacak, ikinci taramada 8 den sonraki en büyük sayını 7 olduğunu görecek ve onu ikinci sıraya atacak. Tabi burdaki püf nokta her taramada farklı değerler bulmasını sağlamak. Biz sadece en büyüğü bulma kodunu eklersek en büyük sayı 8 olduğu için her taramada 8'i tespit edecek. Bunu önlemek için if koşuluna && operatörü ile bir koşul daha ekliyorum. Bu koşul ise bulduğu sayının en son bulduğu büyük sayıdan küçük olma koşulu. Örneğin, ilk taramada sekiz'i buldu, ardından bir daha sekiz'e bakmasını engellemek için bulduğu sayının bir önceki bulduğu sayıdan yani sekiz'den küçük olma koşulu oluyor bu sayede 7'yi tespit ediyor 2. taramada 7 den küçük olma koşulu geliyor bu sayedede hem sekiz'e hem de 7 ye bakmasını engellemiş olup direk direk 6 ya bakmasını sağlıyoruz. Tabi son bir durum ise yer değiştirme olayı. Örneğin taramayı yaptı ve sekiz'i buldu bizde sekiz'i başa atmasını söyledik. Eğer sadece böyle yaparsak sekiz'başa gider ama en baştaki sayıyı yani 3'ü diziden kaybetmiş oluruz. Bu sorunu çözmek içinde yer değiştirme mantığı kullandım. Örneğin sekiz'i buldu ve en başa atadı. 3'ü kaybetmemek içinde 3'ü sekiz'i bulduğu yere koydum yani en sonuncu kısma(eğer bu dizi üzerinden düşünürsek). Böyle böyle her taramada bu değiştirme işlemini yapıyor bizde bu sayede hiçbir sayıyı hafızadan kaybetmiyoruz.Ek olarak bahsetmem gereken son bir şey ise x sayısından küçük olma koşulundaki x'in değeri. Hani her taramada sürekli aynı sayıyı tespit etmemesi için en son taramada büyük bulduğu sayıdan küçük olma koşulunu eklemiştik ya, işte en son bulduğu büyük sayının değerini tutan x değişkenin ilk başta alacağı değer önemli. Tamam taramalarda en son bulunan büyük sayıyı x'e atayacağız ve x den küçük olma koşulu ekleyeceğiz ama x'in en baştaki değeri ne olacak? Bu durumda dizinin ilk taraması çok önemli bir tarama işlemi oluyor. Çünkü ilk taramada en büyük değer bulunacak ve en büyük değer x'e atanacak bu sayede x'in en baştaki değeri dizilerdeki bütün sayılardan büyük olacak. Kodu çalıştırdığınızda dizinin sıralanmadan önceki ve sıralandıktan hali ekran çıkacaktır sizde isterseniz değerleri değiştirerek farklı değerleri sıralayabilirsiniz. Tabi değerini değiştirdiniz dizinin eleman sayısı kaç ise eleman sayısını "diziboyutu" değişkenine atamayı unutmayın.
Kod:
http://paste.ubuntu.com/15150185/

Algoritmam bu şekil arkadaşlar dediğim gibi çok işlevsel bir yöntem değildir sıralama işi için ama değişik bir şeyler deneyeyim dedim. Kod belki daha kısaltılabilir kısaltma konusunda pek çalışmadım açıkçası. Sizin de aklınızda farklı yöntemler varsa paylaşabilirsiniz iyi kodlamalar...
 


Son düzenleme:

Vienicome

Hayalet Avcısı
Mesajlar
2,646
En iyi cevaplar
0
Beğeniler
5,172
Puanları
6,640
__rdtsc() ile kendi algoritmanı ve standart algoritmanın birini karşılaştırabilirsin istiyorsan :(
Benchmark işini kolaylaştırır :(
 

Üst