Sponsor

Arama ve Bulma Algoritmaları

Sponsor
Sponsor

C++ derslerine devam ediyoruz. Dizileri işlemiştik geçen hafta (ilgili konuyu görmek için tıklayınız). Şimdi ise dizileri sıralama ve dizilerde arama 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 - Programlama 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 programlama hakkında düşünce ve görüşlerinizi

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

Facebook sayfası:

*/

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

 

Sponsor
B.Selçuk ÖKSÜZ: 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.

View Comments (1)

  • 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.

Yorumunuz
Sponsor