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ı:*/
Yorumunuz