PHP 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.
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;
}
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;
}
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
)

