folder Tahribat.com Forumları
linefolder C - C++
linefolder C'de Selection Sortu Yaptım. Kontrol Eder Misiniz?



C'de Selection Sortu Yaptım. Kontrol Eder Misiniz?

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    balbazar
    balbazar's avatar
    Kayıt Tarihi: 12/Mart/2010
    Erkek

    C öğrenirken açtığım  3. konumla birlikte merhaba. Yine ben.

    Bubble Sortu öğrendikten sonra bir dahaki konu olan selection sortun kodlarını başka bir yere bakmadan kendim bir şekilde bulup çözmeye karar kıldım. 

    Neden böyle bir şey yaptım? Hazır bilgiyi almadan kendim keşfedersem daha iyi öğrenirim ve unutmam diye düşündüm. Bilmiyorum doğru bir düşünce mi değil mi. Belki de zaman kaybıydı ama  sonuç olarak kafamdan uydurduğum 10 sayıyı sıralama çalıştım selection sort ile.

    Gidip hazır kodlara bakmadan önce kendi yaptığımın doğruluk oranını öğrenmek istedim. Acaba kontrol eder misiniz herhangi bir yerde hatam ya da şurayı düzelt dediğiniz bir yer var mı?

    kodlar: 

     

    #include <stdio.h>  
    #include <cs50.h>
    
    int main (void)
    {
    int numbers[10] = { 9, 4, 2, 7, 5, 3, 8, 5, 1, 2 };
    
    int min , i , j;
        
    
    for (i = 0; i < 10; i++ )
    {
        
        min = numbers[i];  //set the minimum 
        
        for ( j = i; j < 10; j++)
        {
            if ( min > numbers[j])  //swap
            {
                min = numbers[j];
                numbers[j] = numbers[i];
                numbers[i] = min;
                
            }
            
        }
        
        printf("%i", numbers[i]);
    }
    
    return 0;
    
    }
    

     

    balbazar tarafından 28/Ara/16 02:55 tarihinde düzenlenmiştir
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    balbazar
    balbazar's avatar
    Kayıt Tarihi: 12/Mart/2010
    Erkek
     

    yanlışlıkla...

    balbazar tarafından 28/Ara/16 02:52 tarihinde düzenlenmiştir
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    garga
    garga's avatar
    Kayıt Tarihi: 29/Temmuz/2002
    Erkek

    sort.

    selection sort.

    bubble sort.

    short degil yani sort.

    o yuzden sey ettim.


    anca gidersin...
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    balbazar
    balbazar's avatar
    Kayıt Tarihi: 12/Mart/2010
    Erkek
    garga bunu yazdı

    sort.

    selection sort.

    bubble sort.

    short degil yani sort.

    o yuzden sey ettim.

    Doğru hocam gözümden kaçmış düzelttim. Yüz kızartıcı k.bakmayın :D

  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    JPriest
    JPriest's avatar
    Kayıt Tarihi: 09/Mart/2007
    Erkek

    Algoritman doğru ama fazladan adımlar var. Öncelikle dış döngü sıralanacak dizi boyutu kadar değil, (array_size - 1) defa dönmeli.

    for (i = 0; i < 9; i++)

    İçteki döngüde de başlangıç j = i değil j = i+1 olmalı. Yoksa ilk adımda her zaman aynı iki elemanı gereksiz yere karşılaştırmış olursun.

    for (j= i+1; j < 10; j++)

    Bunlar algoritma ile ilgili olan kısımlardı. Kodun daha okunabilir, yönetilebilir ve esnek olması açısından bakarsak da döngüler içinde kullanılan 10 sayısını bir değişkene atamak mantıklı olabilir. Diziye eleman ekleyip ya da diziden eleman çıkarıp yeniden sıralamayı denediğini düşün, en az 3 farklı yerde daha değişiklik yapman gerekecek. O yüzden şöyle bir şey yapabilirsin:

    int arraySize = 10;

    int numbers [arraySize] = ...;

    for (i = 0; i < arraySize - 1; i++)

    for (j= i+1; j < arraySize; j++)

    Bundan sonra da artık sadece arraySize değişkeni ve array'in kendini değiştirerek işine devam edebilirsin.

     


    Sen hiç kaval çaldın mı?
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Easx
    Easx's avatar
    Kayıt Tarihi: 23/Ocak/2010
    Erkek

    Bir ara aklımdaydı ana bir konu açmak. 

    Forumda birçok mühendislik öğrencisi var. C/C++ için C# için , arduino için birer başlık açılsa. İlk mesajda konu gereksinimleri belirtilse ve sorusu olan herkes bu başlıklardan yararlansa hem arama hemde soru cevap konusunda çok daha yardımcı olur. 

    Kullanan çok kişi olacağından konu üstte kalır ve öğrenmek isteyenlerede cesaret olur.

    Meali:

    C ve C++ Soru Cevap Paylaşımı

    2. mesaj bu arkadaşın sorunu olsa 3. mesajda yanıtlansa sorun çözüldükten sonrada 4. 5. mesajda başka kişilerin soru ve cevapları olsa çok hoş olur. Bazen ufak tefekde olsa sorun yaşıyoruz ve konuyu açsam patates ederler mi diye tırsıyorum böylece araya kaynarız :)


    www.kriptopedi.com
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    balbazar
    balbazar's avatar
    Kayıt Tarihi: 12/Mart/2010
    Erkek
    JPriest bunu yazdı

    Algoritman doğru ama fazladan adımlar var. Öncelikle dış döngü sıralanacak dizi boyutu kadar değil, (array_size - 1) defa dönmeli.

    for (i = 0; i < 9; i++)

    İçteki döngüde de başlangıç j = i değil j = i+1 olmalı. Yoksa ilk adımda her zaman aynı iki elemanı gereksiz yere karşılaştırmış olursun.

    for (j= i+1; j < 10; j++)

    Bunlar algoritma ile ilgili olan kısımlardı. Kodun daha okunabilir, yönetilebilir ve esnek olması açısından bakarsak da döngüler içinde kullanılan 10 sayısını bir değişkene atamak mantıklı olabilir. Diziye eleman ekleyip ya da diziden eleman çıkarıp yeniden sıralamayı denediğini düşün, en az 3 farklı yerde daha değişiklik yapman gerekecek. O yüzden şöyle bir şey yapabilirsin:

    int arraySize = 10;

    int numbers [arraySize] = ...;

    for (i = 0; i < arraySize - 1; i++)

    for (j= i+1; j < arraySize; j++)

    Bundan sonra da artık sadece arraySize değişkeni ve array'in kendini değiştirerek işine devam edebilirsin.

     

    Hocam en ince ayrıntısına kadar açıklamıssın. Gereksiz döngüye soktuğum yerleri de anladım.  Çok teşekkür ediyorum 

Toplam Hit: 2006 Toplam Mesaj: 7
c