Kabarcık sıralaması(Bubble Sort)

En basit sıralama aligoritmalarından birisidir ama büyük dizilerde çok yavaş kalmaktadır. Eğer büyük dizilerde sıralama yapacaksanız çok zaman alır. Aligoritmanın karmaşıklığı en kötü durumda(tersten sıralı) O(n²) en iyi durumda ise O(n²/2) dir.

Çalışma mantığı

Örneğin dizimiz aşağıdaki gibi olsun.

88,12,76,55,36,45,1,35

  1. ilk iki sayıyı al(88,12)
  2. iki sayıyı karşılaştır
  3. eğer aldığın ilk sayı ikinci sayıdan büyük ise yer değiştir

bubble_sort

C Kodu

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

void bubble_sort(int dizi[],int n)
{
	int gecici;
	int i,j;
	
	for(i=1;i<n;i++)
	{
		for(j=0;j<n-1;j++)
		{
			if(dizi[j]>dizi[j+1])
			{
				gecici=dizi[j];
				dizi[j]=dizi[j+1];
				dizi[j+1]=gecici;
			}
		}
	}
}

int main(int argc, char *argv[]) {
	
	int dizi[9]={88,12,76,55,36,45,1,35};
	
	bubble_sort(dizi,9);
	int i;
	for(i=0;i<9;i++)
		printf("%d\t",dizi[i]);
	return 0;
}

Yukarıdaki kodumuzu biraz daha düzenleyelim ve nasıl çalıştığına daha detaylı bakalım.

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

void bubble_sort(int dizi[],int n)
{
	int gecici;
	int i,j;
	printf("Siralanma adimlari\n");
	for(i=1;i<n;i++)
	{
		for(j=0;j<n-1;j++)
		{
			if(dizi[j]>dizi[j+1])
			{
				gecici=dizi[j];
				dizi[j]=dizi[j+1];
				dizi[j+1]=gecici;
				dizi_yaz(dizi,n);
			}
		}
	}
}

void dizi_yaz(int dizi[],int n)
{
	int i;
	for(i=0;i<n;i++)
		printf("%d\t",dizi[i]);
}

int main(int argc, char *argv[]) {
	
	int dizi[]={88,12,76,55,36,45,1,35,0,15};
	int n=(sizeof dizi / sizeof *dizi);
	printf("Siralanmamis dizi\n");
	dizi_yaz(dizi,n);
	bubble_sort(dizi,n);
	return 0;
}

Çıktı:

bubble_sort2

 

Yazdığımız kodda dikkat ettiyseniz iç içe iki tane for döngüsü kullanıyoruz. İçerideki döngü işini bitirdiğinde dizideki en büyük eleman yani 88 en sona yerleşmiş oldu. Döngü ikinci kez çalışıp işini bitirdiğinde ise en büyük ikinci eleman yani 76 sıralanmış bir şekilde yerini almış oldu. Ayrıca dizimiz sıralı sayılardan oluşursa gereksiz yere bu kod çalışmış olacak bunu da kontrol altına almamız gerekiyor.

void bubble_sort(int dizi[],int n)
{
	int gecici;
	int i,j;
	printf("Siralanma adimlari\n");
	for(i=1;i<n;i++)
	{
		int sirali_mi=1;
		for(j=n-1;j>0;j--)
		{
			if(dizi[j-1]>dizi[j])
			{
				sirali_mi=0;
				gecici=dizi[j];
				dizi[j]=dizi[j+1];
				dizi[j+1]=gecici;
				dizi_yaz(dizi,n);
			}
		}
		if(sirali_mi==1)
			break;
	}
}

 


Yayımlandı

kategorisi

,

yazarı:

Etiketler:

Yorumlar

Bir yanıt yazın

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

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.