Şimdi Ara

Dizide arama yapmak...

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
1
Cevap
0
Favori
1.347
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • #include <stdio.h> 
    #define boyut 15
    void sirala(int [],int);
    int arama(int [],int,int);
    int main()
    {
    int sonuc;
    int ara;
    scanf("%d",&ara);
    int a[boyut]={3,15,2,1,4,5,6,7,8,9,12,11,10,14,13};
    int i;
    int b[boyut];
    for(i=0;i<boyut;i++) b[i]=a[i];
    sirala(b,boyut);

    sonuc=arama(b,boyut,ara);

    if(sonuc==-1) { printf("yok");
    }
    else {
    printf("\n %d",sonuc);
    }
    return 0;
    }










    void sirala(int c[],int boy)
    {
    int tut,tur,a;
    tur=boyut;
    for(tur=0;tur<boyut;tur++) {
    for(a=0;a<boyut-1;a++) {
    if(c[a]>c[a+1]) {
    tut=c[a];
    c[a]=c[a+1];
    c[a+1]=tut; } }
    }
    }

    int arama(int d[],int boybaba,int aaa) {

    int orta,enust,enalt;
    enalt=0;
    enust=boyut-1;
    orta=(enust+enalt)/2;
    int x=0;
    while(x==0) {

    if(aaa==d[orta]) { return orta;

    break;}
    if(aaa>d[orta]) {
    if(aaa==d[enust]) {return enust;

    break;}
    enalt=orta+1;
    orta=(enalt+enust)/2;

    continue;
    }
    if(aaa<d[orta]) {
    if(aaa==d[enalt]) { return enalt;

    break;}
    enust=orta-1;
    orta=(enalt+enust)/2;
    continue; }


    }
    return -1;
    }


    Bildiğiniz gibi burda amaç iki for döngülü karşılaştırmanın yavaşlığından kaçınmak.Yalnız bu defa sadece sayınn var olup olmadığını ve büyüklük sıralamasında kaçıncı olduğunu buluyoruz.Eğer orjinal dizideki yerini bulmak istersek for döngülerinden kaçınarak nasıl yapabiliri z bunu bilen var mı?







  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.