Çözüldü C Binary Search çalışmıyor

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.
Katılım
2 Haziran 2020
Mesajlar
5.470
Makaleler
10
Çözümler
84
Yaklaşık yarım saattir bakıyorum ama bir şey bulamadım. Sayılar dizisinin 3. indeksinden sonra çalışmıyor. Hatam nedir?

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

int binarySearch(int dizi[], int lower, int higher, int arananDeger)
{

    while (lower <= higher)
    {

        int medium = lower + (higher - lower) / 2;

        if (dizi[medium] == arananDeger)
            return medium;

        if (dizi[medium] < arananDeger)
            lower = medium + 1;

        else
            higher = medium - 1;
    }
    return -1;
}

int main()
{

    int sayilar[] = {1,7,9,78,-5,2}; //kendiniz degistirebilirsiniz.
    int arananSayi;
    int boyut = sizeof(sayilar) / sizeof(int);

    while (1)
    {
        printf("Dizi icinde nerede oldugunu ogrenmek istediginiz sayiyi giriniz.\n");
        scanf("%d", &arananSayi);
       
        int aramaSonuc = binarySearch(sayilar, 0, boyut - 1, arananSayi);
     
        if (aramaSonuc >= 0)
            printf("Aradiginiiz sayi %d. indekstedir.\n", aramaSonuc);
       
        else
            printf("Aradiginiiz sayi bulunamadi.\n");
    }

    system("pause");
    return 0;
}
 
Son düzenleyen: Moderatör:
Yani dizinin herhangi bir şekilde sıralanmış olması gerekiyor. Örneğin sizin yazdığınız dizinin elemanları 1, 7, 9, 78, -5, 2. Bunların -5, 1, 2, 7, 9, 78 gibi bir sırada olması gerekiyor.
Bu kadar kolay olmasını beklemiyordum çözümün. Az daha kafayı yiyecektim. Çok teşekkürler :)
 
Bu kadar kolay olmasını beklemiyordum çözümün. Az daha kafayı yiyecektim. Çok teşekkürler :)
Rica ederim. 🙂

Biliyorsunuz ki binary search dizinin ortanca elemanına bakar, daha sonra aranan elemana göre dizinin ilk ya da ikinci yarısının ortanca elemanına bakar ve aranan elemanı bulana kadar bu böyle gider. Ortanca elemanın istendiği gibi ortada olabilmesi için dizinin sıralanmış olması gerekiyor. Ortanca değer alakasız bir yerde olursa bu istediğimizi yapamayız.
 
Rica ederim. 🙂

Biliyorsunuz ki binary search dizinin ortanca elemanına bakar, daha sonra aranan elemana göre dizinin ilk ya da ikinci yarısının ortanca elemanına bakar ve aranan elemanı bulana kadar bu böyle gider. Ortanca elemanın istendiği gibi ortada olabilmesi için dizinin sıralanmış olması gerekiyor. Ortanca değer alakasız bir yerde olursa bu istediğimizi yapamayız.
Evet mantığını biliyorum. Ancak o an sıralanmış olması gerektiğini düşünemedim. En azından öğrenmiş oldum. Tekrar teşekkürler :)
 
Uyarı! Bu konu 5 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Technopat Haberler

Yeni konular

Geri
Yukarı