-- algoritmalar, c, java

Sıralama Algoritmaları [2] : Bubble Sort

Daha önceki yazılarımdan birinde(Selection Sort) sıralama algoritmalarına küçük bir giriş yapmıştım. Bu yazı da onun devamı niteliğinde olacak ama açıklama için yine işi daha iyi birilerine (Wiki) bırakacağım. Bubble sort için C/C++ ve Java’da yazdığım kodları yazmam yeterli olur sanırım.

Bu arada Java’da yazdığım kod sayısı 100 satırı geçti bunlarla birlikte :P “Hello World” un üstüne bayağı şey yapmışım demek ki :)

C/C++ Kodu :

void bubbleSort(int dizi[], int elemanSayisi)
{
     int temp;
     int i, j;

     for (i=1; i<elemanSayisi; i++)
     {
         for (j=0; j<elemanSayisi-i; j++)
         {
             if(dizi[j] > dizi[j+1])
             {
                        temp = dizi [j];
                        dizi [j] = dizi [j+1];
                        dizi [j+1] = temp;
             }
         }
     }
}

Java Kodu :

    public static void BubbleSort(int [] dizi)
    {
        int temp;   // Yer değiştirmede kullanılacak geçici değişken
        for (int i=1; i<dizi.length; i++)
        {
            for(int j=0; j<dizi.length-i; j++)
            {
                if (dizi[j] > dizi [j+1])
                {
                    temp = dizi [j];
                    dizi [j] = dizi [j+1];
                    dizi [j+1] = temp;
                }//Önce gelen elaman bir sonrakinden büyükse ikisi yer değiştiriyor
            }// Dizinin ardışık elamanlarını karşılaştırmak için kullandığımız döngü
        }// Her karşılaştırmadan sonra yeniden kaldığımız yerden devam etmemizi sağlayan döngü
    }

Yorum yazın

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

28 Yorum

  1. Hocam biraz açıklama iyi olur bence. Bu arada önemli olan quickle, merge gerisi yalan :P

  2. Selection Sort’u yazdığım zaman da “Küçük boyutlu dizilerde fazla kod yazmaya gerek kalmadan kullanılabilecek bir algoritmadır.” ifadesini kullanmışım, bu da aynı kategoride. Gerisi yalan diyorsun ama bu kadar basit değil onları yazmak ve her zaman gerek duyulmaz. Ufak tefek işlerde kullanabilirsin ya da bellek veya zaman sıkıntın yoksa yine kullanabilirsin, sonuçta çalışıyor :)

  3. Burdaki yazıları işini iyi yapanlar için değil de başlangıç seviyesindeki insanlar için yazıyorum. Belki google’dan sağdan soldan bir şekilde buraya ulaşırlar da bir şeyler öğrenirler. Ben öyle öğrenmeye çalışıyorum en azından.
    Önce basit olanları yazalım ki benim gibi acemiler direkt quick ya da merge sort ile baş etmek yerine mantığı kavrayarak ilerlesinler. İlerde onları da yazarız :)

  4. Estağfirullah, zaten anlattıklarınız çok güzel şeyler. Ben sadece onların daha iyi olduğunu vurguladım. Anlaşma sorunu oldu. Devamını bekleriz..

  5. bubble çok ilkel bir algoritma ;
    merge en mantıklı olan ama oda zor

  6. İlkel olabilir ama mantıklı derken iki defa düşün derim. 20 elemanlı diziyi sıralamak için Merge Sort’u yazmak pek mantıklı iş olmasa gerek.

  7. haklısın ama bizim işimiz daha çok geniş inputlar üzerinde değilmi

  8. Yaptığınız işin ne olduğunu bilmiyorum ama defalarca söylediğim gibi küçük boyutlu işlerde kullanılabilir, kod verimsiz ama basit yazılır vs.. Sizin ya da benim ya da bir başkasının işi daha çok geniş inputlar üzerinde olabilir ama bu yazdıklarıma da ihtiyacı olanlar var. Belki arama motorundan gelip işine yarayan bir şeyler öğrenir. Tek gaye bu..

  9. hocam bu fonksiyonu main in içinde nasıl çağırabiliriz?

  10. C ya da C++’da main içinde bir dizi tanımladıktan sonra, örneğin
    int sayilar[10];
    ve eleman atamalarından sonra,
    bubbleSort(sayilar[], 10);
    şeklinde çağırabilirsin. Java’da direkt
    BubbleSort(sayilar); şeklinde kullansan olur.

  11. bence sen bubleshort algoritmasına bidaha bak 0. elemanı sırasıyla 1,2,3,4,5,…. elmanlarlamalısın daha sonra 1. elamanı 2.3…… sense 0 ı 1le 1 i 2 ….. diye yapmıssın bu insertion short gibi bisey olmus ama kesinlikle buble degıl…saygılarımla

  12. Yorum için teşekkürler. Buraya yazarken içteki for’da eleman_sayısı – i yerine eleman_sayısı – 1 yazmışım. O kısmı düzenledim, artık bubble sort olmuştur umarım.

  13. yine olmadı amacın dizinin 0 cı elemanını sırasıyla 1 2 3….n le karsılastırmak onun icin i yi 0 dan baslat j yide i+1 den baslat icerdede dizi[i] ile dizi[j] yi karsılastır bu sekilde dizi[i] dizi[0] iken dizi[j] artarak dizi[0] ile karsılastırrılacak ve sonuc olarak en kucugu en basa almıs olducaksın i artınca kalanelmanlardan dizinin enkucuk ıkıncı elemanını sececeksın bu sekılde sıralama dewam edicek
    kısacası bu sıralama 1 elemanla dıger butun elamanları karsılastırmıs ve en kucugu basa alarak sıralayan bı sıralama cesıdı.

  14. ben bu işe yeni başladım benim bu kodlardan anladığım mantık şu:
    dizinin sıfırıncı gözündeki değerle birinci gözündeki değeri karşılaştırıyor eğer [0]>[1] ise sıfırıncı değer birinci değerle yer değiştiriyor bu işlem dizinin bütün elemanlarına uygulanıyor… doğrumu bu acıklama

  15. @öğrenci
    Tam olarak değil. O dediğini dizinin boyutu-1 defa tekrarlıyor.
    @öğrenci, @ALGO
    Bubble Sort ile ilgili olarak Türkçe wiki’de şöyle yazıyor :
    “Kabarcık sıralaması dizinin başından başlar ve dizi elemanlarını sırayla seçer. Seçilen dizi elemanı kendinden sonra gelen elemandan büyükse bu iki elemanın yerleri değiştirilir. Bu işlem sonucunda dizinin en büyük elemanı dizi sonuna yerleştirildiğinden bir sonraki adımda arama sınırı bir eleman geri çekilir. Bu işlem, dizinin sonundaki elemanın karşılaştırılmasına kadar yinelenerek sürdürülür.”

  16. phpde dizi elemanlarını sıralamak için sıralama fonksiyonlarını kullanmadan(sort rsort asort…vb) nasıl yapabiliriz…

  17. @ibrahim
    şu yukarda yazılı olan C/C++ kodunu Php’ye uyarlayıp yapabilirsin ya da google’da ‘bubble sort php’ diye yazıp arattığında bi sürü örnek çıkıyor.

  18. hocam öncelikle bizleri aydınlattıgınız için teşekkürler.bu sıralama algoritmaları ile ilgili bir sorum olacaktu size.sıralama algoritmalarından secerek sıralama da bir şey kafama takıldı.çift yönlü secerek sıralama die birşey okudum c’de ama çözemedim tam mantıgını yardımcı olabilirseniz minnettar olurum.

  19. @yakup
    yorumunu yeni gördüm onayladım kusura bakma geç kaldım sanırım biraz. O dediğine bakmadım daha önce hiç, fırsatım olursa bakıp yine buradan anladığım kadarıyla bilgi veririm. Belki bir başkasının işine yarar.

  20. hocam kod için çok teşekkürler.programlamaya yeni başlayanlar ve henüz mantığını kavrama aşamasında olanlar için çok faydalı bir çalışma.

  21. Öncelikle teşekkürler. Ben yeni başladım kodlama çalışmalarına. makalelerinizi yakından takip etmekteyim.

  22. Farzedinki ağaç fonksiyonları arasında bul_k_inci_eleman fonksiyonunu eklemek istiyoruz. bul_k_inci_eleman fonksiyonu ağaçtaki en küçük k ıncı elemanı bulacak. Ağaçtaki elemanların hepsinin ağaçta birkez kullanıldığını kabul ediniz.
    hocam ödev sorusuna yardımcı olur musunuz?

  23. .

    .

    public static void EnKucukKacinciyiBul(int [] dizi,int Kacinci)
    	{
    	    int temp;
    	    for (int i=1; i<dizi.length; i++)
    	    {
    	        for(int j=0; j<dizi [j+1])
    	            {
    	                temp = dizi [j];
    	                dizi [j] = dizi [j+1];
    	                dizi [j+1] = temp;
    	            }
    	        }
    	    }
              return dizi[Kacinci]; 
    	}
    
  24. Cevap için teşekkürler @Rıfat
    void yerine int olsa sanki daha doğru olacak gibi :)

  25. yanlış yazmışsın 2.for loopun şartı length-i-1 olacak

  26. Hocam eline koluna sağlık gayet güzel paylaşım.. Birde elin değmişken Quicksort u paylaşsan tadından yenmez :)

  27. Bir konuda yardıma ihtiyacım var. Elimizde rectangular 2 boyutlu 2 sütunlu string dizi var. string[,] workedYearName = { {“8”, “ab” }, { “2”, “ca”}, { “1”, “ga” }, { “3”, “as”}}; Bu diziyi 1. sütuna göre sıralatmak için aşağıdaki kod kullanılıyor ve diziyi sıralıyor.

    private static void Sirala(string[,] dizi)
    {
    int length = dizi.Length / dizi.Rank;

    for (int i = 0; i < length – 1; i++)
    {
    for (int j = i + 1; j ikinci)
    {
    string temp0 = dizi[i, 0];
    string temp1 = dizi[i, 1];

    dizi[i, 0] = dizi[j, 0];
    dizi[i, 1] = dizi[j, 1];
    dizi[j, 0] = temp0;
    dizi[j, 1] = temp1;
    }
    }
    }
    }

    ANCAK Diziyi aşağıdaki gibi 3 sütunlu oluşturursak yukarıdaki kodları nasıl düzenlemeliyimki ilk sütuna göre tekrar sıralama yapsın?
    string[,] workedYear_Name_Stat = { {“8”, “ab”,”married” },
    { “2”, “ca”,”married”},
    { “1”, “ga”,”single” },
    { “3”, “as”,”married” }};