Reklam gösterimini engelleyici yazılım kullandığınızı görüyoruz.
Sitemizin ayakta kalıp sizlere hizmet edebilmek için en büyük gelir kaynağı sayfamızda gösterilen reklamlardır.
Reklam gösterimde bizim sayfamıza ayrıcalık tanıyarak ayakta kalmamıza destek olmak ister misiniz ?

Yazılı Ders   | Bubble Sort Mekanizması

Konu

#1
Son Düzenleme: 07-03-2018, Saat: 23:42, Düzenleyen: M.A - Burkay.
Örneğin elimizde bütün oyuncuların kill sayıları olsun. Bu sayıları optimum şekilde nasıl sıralarız ve mantığı nedir?


Kod:
NOT: İleri seviye pluginciler için anlatımdır. Amaç beyin fırtınasıdır.
Kütüphanede hazır verilen Arraysort tarzı paketleri de kullanabilirsiniz.


Sıralama konusu oldukça karışık olmakla birlikte hangi data tipini sıralayacağımız hangi sıralama tipini kullanacağımızı değiştirebilir. Bu konuda bubble sort yani integer sıralamasının mantığını gösteriyorum...



Videoda arkadaş en kötü senaryoyu n(n+1)/2 diye söylemiş. Bu yanlıştır fakat mantığını güzel anlatmış. Doğru yazıldığında en fazla karşılaşacağımız döngü sayısı n'in 2li kombinasyonu yani n(n-1)/2 şeklindedir.

Örnek Plugin:
Konsola "siralama" yazarak çalıştırabiliriz.
PHP Kod:
/* 
       .__                 
_____  |  |   ____ ___  ___
\__  \ |  | _/ __ \\  \/  /
 / __ \|  |_\  ___/ >    < 
(____  /____/\___  >__/\_ \
     \/          \/      \/
*/

#include <amxmodx>
#include <amxmisc>

public plugin_init() {
    
register_plugin(
    
"None",
    
"v0.1",
    
"aLeX"
    
);
    
register_clcmd("siralama","siralama");
}

public 
siralama(id) {
    new 
tutucu,dizi[] = {1,2,-1,4,5,4,6,9,100};
    for(new 
i;i<sizeof(dizi);i++) console_print(id,"%i nolu eleman: %i",i+1,dizi[i]);
    
console_print(id,"Siralama yapiliyor...");
    
    new 
tursayisi;
    for(new 
i;i<sizeof(dizi)-1;i++) {
        new 
bool:kontrol;
        for(new 
k;k<sizeof(dizi)-1-i;k++) {
            if(
dizi[k] > dizi[k+1]) {
                
tutucu dizi[k];
                
dizi[k] = dizi[k+1];
                
dizi[k+1] = tutucu;
                
kontrol true;
            }
            
tursayisi++;
        }
        if(!
kontrol) break;
    }

    
console_print(id,"Siralama tamamlandi.^nToplam dongu sayisi: %i",tursayisi);
    for(new 
i;i<sizeof(dizi);i++) console_print(id,"%i nolu eleman: %i",i+1,dizi[i]);
    return 
PLUGIN_HANDLED_MAIN;

Örnek C Kodu:

Kod:
///////////////////////////////////
//          MoeRu Army           //
//     Coder Team'den [Burkay]   //
//     Alımlarımız Başlamıştır.  //
//          Since 2018           //
///////////////////////////////////

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

int main()
{
   int tutucu,tursayisi=0,boyut,i,j;
   printf("Girilecek Sayi Sayisi : ");
   scanf("%d",&boyut);
   int dizi[boyut];
   for(i=0;i<boyut;i++)
   {
       printf("%d. Sayinizi Giriniz : ",i+1);
       scanf("%d",&dizi[i]);
   }
   for(i=0;i<boyut-1;i++) {
       bool kontrol;
       kontrol = false;
       for(j=0;j<boyut-1-i;j++)
       {
           if(dizi[j] > dizi[j+1]) {
               tutucu = dizi[j];
               dizi[j] = dizi[j+1];
               dizi[j+1] = tutucu;
               kontrol = true;
           }
           tursayisi++;
       }
       if(!kontrol) break;
   }
   printf("Siralama Tamamlandi.\nToplam Dongu Sayisi : %d\n",tursayisi);
   for(i=0;i<boyut;i++)
       printf("%d. Nolu Eleman : %d\n",i+1,dizi[i]);
   return 0;
}





Neden dış döngü neden n değil n-1 tanedir?
Her döngüde dizinin x'inci sayısıyla x+1'inci sayısı karşılaştırılıyor. n-1'lik döngünün sonunda n-1 ve n'inci sayıları karşılaştırdığımız için fazladan bir döngüye ihtiyacımız yok.

Neden iç döngü n-i-1 tanedir?
Her bir dış göngüde en büyük sayı en sona gider. Yani en sonda en büyük sayılar toplanacağı için sondaki sayıları kontrol etmemize gerek kalmaz.

Kontrol isimli bool ne işe yarar?
Pluginde tanımlı "kontrol" maximum n(n-1)/2 tane olacak döngü sayısını azaltmak amacıyla kullanılır. Dışta olan herhangi bir döngü bittiğinde iç döngüde swap yapılmadıysa (bütün sayılar sıralıysa) döngü kırılır. Sorting işlemi tamamlanmıştır.

Son olarak ilginizi çekebilecek farklı sıralama işlemlerinin gösterildiği bir video paylaşıp konuyu bitiriyorum.



Cevapla
#6
Güzel anlatım olmuş tam da c# de sıralamayı öğrenirken işler daha da yoluna oturdu


Cevapla
#7
Bende başlamayı düşünüyorum konuya yorum atmıssım zaten bakalım Allah ne verirse : )


Cevapla
#8
Teşekkürler Yararli



Cevapla
#9
Eywallah


REHAREIZ Since 2 0 1 4 - 2 0 1 8
Eski Bir Efsanenin yarim kalmis hikayesi
Ben Şeytan Değilim Ama Şeytanın Benden Ögreneceği Çok Şey Var !
Cevapla


Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da

Task