⭐🚀 TkyNET | Blacklist ve Profesyonel DDoS Korumalı TeamSpeak 3 Sunucuları 🚀⭐
Sponsor Görsel
🇹🇷 TR Lokasyon | 🛡️ Gelişmiş DDoS Koruması | ⚡ Düşük Ping | 🎧 Kesintisiz TS3 | Hostlar
Sponsor Görsel 2
SponsorSponsor

Bubble Sort Mekanizması

Konu

#1
Ö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?

PHP Kod:
NOTİleri seviye pluginciler için anlatımdırAmaç 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:

PHP 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.

Diğer Video Link;
https://www.youtube.com/watch?v=kPRA0W1kECg
Son Düzenleme: 07-08-2020, 18:33, Düzenleyen: PawNod'.
Cevapla
#2
Teşekkürler
Cevapla
#3
Teşekkürler @PawNod'
Cevapla

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

Yorum yapmak için üye olmanız gerekiyor

ya da
Task