Arama ve Bulma Algoritmaları

4 Mart 2011 by B.Selçuk ÖKSÜZ
Leave a reply »
WP Greet Box icon
Merhaba! Selcukoksuz.com adresine hoş geldiniz. Eğer yeni iseniz ve içeriğimizi takip etmek isterseniz RSS Abonesi Olabilirsiniz.
Mailinize onay mesajı gönderilecektir. Cevaplamayı unutmayınız.

C++ derslerine devam ediyoruz. Dizileri işlemiştik geçen hafta (ilgili konuyu görmek için tıklayınız). Şimdi ise dizileri ve dizilerde yapacağız.

Bir çok sıralama algoritması mevcut. Bugün Bubble Search(Kabarcık Sıralama) ile bir dizi sıralayacağız. Sonrasın da sıraladığımız bu dizi içerisinde Linear Search(Doğrusal Arama) ve Binary Search(İkili Arama) algoritmaları ile arama yapacağız. Hazırlamış olduğum uygulamada kendi fonksiyonlarım ile çalıştım. Detaylı açıklamalar aşağıda ki kodlar da mevcut. Proje dosyasını da aşağıda link olarak paylaşacağım.

Kodda kafasına bir şey takılan olursa yada yanlış bir yer fark ederseniz lütfen burada paylaşınız. İyi çalışmalar dilerim.

//25.02.2011 2. Ders -  2
/*
Dizilerde arama algoritmaları ve uygulamaları

* int dizi[N]={ "süslü parantezler arasında" }; dizi tanımı
* dizi[x] = {1,2,}; yanlış bir kullanımdır. solda ki ifade dizinin x indisinde ki değere atama yapmaktadır.
                  Dizi tanımlaması değildir.

*Algoritmaların çeşitlilik sebepleri;
    -Hız
    -Doğruluk
    -Daha kolay kodlama
    -Karmaşıklık
       ->Hesaplama Kar(Computational Complexity)
       ->Zaman Kar(Time Complexity)
       ->Bellek Gereksinimi(Space Complexity)

*Arama İşlevleri
     -Var Mı?
     -En Küçük/Büyük Bulma
     -Sıralama
*/

#include <iostream>
#include <stdlib.h>
#include <conio.h>
#define N 10

void writeArray (int array[]);
void bubbleSort(int array[],int arrayLenght);
void linearSearch(int array[],int arrayLenght);
void binarySearch(int array[],int arrayLenght);
void myMenu(void);

int main()
{
      myMenu();

      int myArray[N] = {5,-2,0,10,20,80,35,17,13,2};

      printf("Ilk Hali ");
      writeArray(myArray);

      printf("Sirali Hali(Bubble Search) ");
      bubbleSort(myArray,N);
      writeArray(myArray);

      linearSearch(myArray,N);

      binarySearch(myArray,N);

          system("pause");
}

void writeArray (int array[])
{
      printf("Dizi degerlerimiz ==>");
      for(int i=0;i<N;i++)
      {
           printf(" %d",array[i]);
      }
      printf("\n");
}

void bubbleSort(int array[],int arrayLenght)
{
     int temp,iFirst,iSecond;

     for(iFirst=0;iFirst<arrayLenght;iFirst++)//Dizimizi baştan başlayıp sona kadar dolanacak ilk döngü
     {
         //Dizi içerisinde ki değerleri bir biri ile karşılaştıracak olan ikinci döngü
         for(iSecond=0;iSecond<arrayLenght-1-iFirst;iSecond++)
         {//Yukarıda dizi uzunluğundan 1 eksilttik. Çünki dizi ilk elemanı sıralamaya dahil olmuyor.

             if(array[iSecond]>array[iSecond+1])//Dizi içerisinde ki iki değer karşılaştırılıyor
             {
                 temp = array[iSecond];//Büyük olan geçici değişkene atılıyor
                 array[iSecond] = array[iSecond+1];//sonrasında değerler yer değiştiriliyor
                 array[iSecond+1] = temp;
             }//if
         }//for
     }//for
}//main

void linearSearch(int array[],int arrayLenght)
{
     int key;//Aranacak kelime değişkeni tanımlanıyor
     printf("\nDogrusal arama ile aranacak degeri giriniz = ");
     scanf("%d",&key);//Kullanıcıdan değer alınıyor   

     int j; int findKey = -1;
     //Arama sonucunu tutan değişken. Başlangıç değeri -1
     //Çünki asla döngüden negatif bir değer çıkmaz ve bu şekilde kontrol daha kolay sağlanabilmekte.

     //Dizi içinde aranan değerle indis değerleri karşılaştırışıyor
     for(j=0;(j<=arrayLenght) && (findKey == -1);j++)
     {//j dizi değerinden ve aranacak kelime değişkeni -1 oldukça ara
         if(array[j] == key)
            findKey = j;
     }

     if(findKey != -1)//Aranan değer bulundu
         printf("Dogrusal arama ile aradiginiz %d dizide %d indisinde bulunmakta.\n",key,findKey);
     else if(findKey == -1)//Aranan değer bulunamadı
         printf("Aradiginiz Deger Dizide Bulunmamaktadir.\n");
     else//Sistemde bir hata meydana geldi.
         printf("Hata Var");
}

void binarySearch(int array[],int arrayLenght)
{
     int key;//Aranacak kelime değişkeni tanımlanıyor
     printf("\nIkili arama ile aranacak degeri giriniz = ");
     scanf("%d",&key);//Kullanıcıdan değer alınıyor   

     int mid, left = 0, right = arrayLenght, findKey = -1;;

     while((left<=right) && (findKey == -1))
     {
          mid = (left+right)/2; //Diziyi ortadan ikiye böleceğiz. Ama bunu program nasıl yapacağını bilemez
          if(key == array[mid])
                 findKey = mid;
          else if(key>array[mid])
                 left=mid+1;
          else if(key<array[mid])
                 right=mid-1;
          else
               printf("Hata var");
     }

     if(findKey != -1)//Aranan değer bulundu
         printf("Ikili arama ile aradiginiz %d dizide %d indisinde bulunmakta.\n",key,findKey);
     else if(findKey == -1)//Aranan değer bulunamadı
         printf("Aradiginiz Deger Dizide Bulunmamaktadir.\n");
     else//Sistemde bir hata meydana geldi.
         printf("Hata Var");
}

void myMenu(void)
{
    printf("\t_________________________________________________________\n\n");
	printf("\t                     blog.selcukoksuz.com                \n");
	printf("                    Programlam 2 Dersi Dizilerde Islemler   \n");
	printf("                     Bubble Sort,Binary and Linear Search   \n\n");
    printf("\t_________________________________________________________\n\n");
}

/*Bu kodlama B.Selçuk ÖKSÜZ tarafından hazırlanmıştır.
Kodlar hakkında yada  hakkında düşünce ve görüşlerinizi

http://blog.selcukoksuz.com adresi altında iletebilirsiniz.

Facebook sayfası:
http://facebook.com/TurkiyeninMuhendisleri
*/

C++ Arama ve Sıralama Algoritma Uygulaması İndir

 

Yazar Hakkında

Bilgisayarla yaşamayı bir tarz olarak benimsemiş, teknoloji ile tamamen içli dışlı bir; web tasarımcı, yazılımcı, donanımcı, blog yazarı ve bilgisayar mühendisidir.

B.Selçuk ÖKSÜZ
B.Selçuk ÖKSÜZ kullanıcısının tüm yazıları.

Arama Sorguları

  • c arama algoritmaları (45)
  • ikili arama sıralama (22)
  • c de arama algoritmaları (16)
  • sıralama algoritmaları c (15)
Advertisement

Bu Yazıyı Beğendiniz Mi?

2

2 comments

  1. bob dedi ki:

    Your algorithm is incorrect. Consider searching the array [1] for the value 2.
    left = 0, right = 1, mid = 0
    left = 1, right = 1, mid = 1
    You try to access “array[mid]”, which is “array[1]”, which is out of bounds, since the array only has length 1.

Bir Cevap Yazın

Sizin Yorumunuz Nedir?

%d blogcu bunu beğendi:
Gizlilik Hakları