Çö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.
 
Evet mantığını biliyorum. Ancak o an sıralanmış olması gerektiğini düşünemedim. En azından öğrenmiş oldum. Tekrar teşekkürler
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…