Merhabalar, yazma sırası Selection Sort – Seçmeli Sıralama Algoritması ‘na geldi. Daha önce Bubble Sort ve Insertion Sort algoritmasını görmüştük. Hem C# hem de C++ programlama dillerinde nasıl kodlandığını paylaşacağım. Hem yapay zekaya temellerinden başlamak hem de C++ öğrenmeyi hedefliyoruz. Bu yazının sonunda sizlere ücretsiz bir kurs göndereceğim. Temel olarak C++ bilgileri vermektedir.
Selection Sort – Seçmeli Sıralama Algoritması
Selection Sort – Seçmeli Sıralama Algoritması Nedir?
İngilizcesi Selection Sort Türkçesi ise Seçmeli yada Seçimli Sıralama ‘dır. Seçimli denmesindeki sebep ise dizideki en küçük sayıyı bulup, olması gerektiği yere koyar ve ardından en küçük ikinci sayıya geçer. Bu algoritmanın karmaşıklı O(n2) ‘dir. Bu sebeple büyük diziler ile kullanıldığında performans ve verim sağlamaz. Yakınen benzediği Eklemeli Sıralama’dan çok daha başarısızdır. Bu algoritmanın tercih edilmesinde nedenlerden birisi yalın olması ve daha karmaşık olan algoritmalara göre daha iyi sonuç vermesidir.
Selection Sort Çalışma Prensibi
İlk olarak dizideki en küçük itemi bulur. İlk indeksteki item ile yerini değiştirir. Sonra aynı şeyleri ikinci en küçük ve üçüncü en küçük diyerek yapmaya devam eder. Aşağıdaki gif SelectionSort’un çalışma şeklini ifade etmektedir.
Karmaşıklık Hesabı
Seçmeli / Seçimli sıralama algoritmasının zaman karmaşıklığı hesaplanmak istendiğinde, yapılan yer değiştirmeler ve karşılaştırmalar göz önünde bulundurulmalıdır. N item sayılı bir dizide en küçük item için n-1 defa karşılaştırma yapılır. En küçük ikinci item için ise durum n-2 idir. Diğer itemler için ise n-3, n-4, 2, 1, 0 olarak devam eder. Listedeki tüm itemler için yapılacak olan karşılaştırma toplamı
( n – 1 ) + ( n – 2 ) + ( n – 3 ) + ( n – 4 ) … + 2 + 1 + 0 = n ( n – 1 ) / 2 olur.
Her item için sadece bir kere yer değiştirme yapılır ise tüm dizi için n adet değiştirme yapılır. Hesap sonucu bulunan
n + n ( n – 1 ) / 2
sonuçların asimtopik üst sınırı O(n2) değerini verir. Listenin en küçük elemanının dizi içerisinde nerede olduğu bilinmediği için tüm elemanlarla karşılaştırma yapıldığı varsayımında bulunulur ve seçmeli / seçimli sıralam algoritmasının karmaşıklığı her durum için O(n2) karmaşıklığı ile çalışır. Aşağıdaki görselde çalışma şeklini görebilirsiniz.
Algoritmanın Adım Adım İşleyişi
Aşağıdaki görselde adım adım işleyişin nasıl olduğunu görebilirsiniz.
Selection Sort – Seçmeli Sıralama Algoritması C# ve C++ Kodları
Şimdi gelelim kodlarına. C# ve C++ olarak nasıl kodlanıyor görelim. Kodları ve çıktılarını ekran görüntüsü olarak vereceğim arkadaşlar.
Dizimiz bu şekilde: {5, 6, 8, 1, 88, 99, 78, 45, 36, 25, 12, 9, 7}
C# Kodları
int[] Sayilar = new int[] { 5, 6, 8, 1, 88, 99, 78, 45, 36, 25, 12, 9, 7 }; void Selection_Short() { int enkucuk, yedek; int n = Sayilar.Count(); for (int i = 0; i < n - 1; i++) { enkucuk = i; for (int j = i + 1; j < n; j++) if (Sayilar[j] < Sayilar[enkucuk]) enkucuk = j; if (enkucuk != i) { yedek = Sayilar[i]; Sayilar[i] = Sayilar[enkucuk]; Sayilar[enkucuk] = yedek; } Yazdir(); } } void Yazdir() { textBox1.Text += (string.Join(",", Sayilar)) + Environment.NewLine; }
1,6,8,5,88,99,78,45,36,25,12,9,7 1,5,8,6,88,99,78,45,36,25,12,9,7 1,5,6,8,88,99,78,45,36,25,12,9,7 1,5,6,7,88,99,78,45,36,25,12,9,8 1,5,6,7,8,99,78,45,36,25,12,9,88 1,5,6,7,8,9,78,45,36,25,12,99,88 1,5,6,7,8,9,12,45,36,25,78,99,88 1,5,6,7,8,9,12,25,36,45,78,99,88 1,5,6,7,8,9,12,25,36,45,78,99,88 1,5,6,7,8,9,12,25,36,45,78,99,88 1,5,6,7,8,9,12,25,36,45,78,99,88 1,5,6,7,8,9,12,25,36,45,78,88,99
C++ Kodları
#include <iostream> #include <ctime> #include <cstdlib> using namespace std; void printArray(int dizii[], int size) { for (int i = 0; i < size; i++) cout << dizii[i] << " "; cout << endl; } int main() { int Sayilar[] = { 5, 6, 8, 1, 88, 99, 78, 45, 36, 25, 12, 9, 7 }; int enkucuk, yedek; int n = sizeof(Sayilar) / sizeof(Sayilar[0]); for (int i = 0; i < n - 1; i++) { enkucuk = i; for (int j = i + 1; j < n; j++) if (Sayilar[j] < Sayilar[enkucuk]) enkucuk = j; if (enkucuk != i) { yedek = Sayilar[i]; Sayilar[i] = Sayilar[enkucuk]; Sayilar[enkucuk] = yedek; } printArray(Sayilar, n); // aşama aşama gösterir. } //printArray(Sayilar, n); // sadece sonucu gosterir. }
1 6 8 5 88 99 78 45 36 25 12 9 7 1 5 8 6 88 99 78 45 36 25 12 9 7 1 5 6 8 88 99 78 45 36 25 12 9 7 1 5 6 7 88 99 78 45 36 25 12 9 8 1 5 6 7 8 99 78 45 36 25 12 9 88 1 5 6 7 8 9 78 45 36 25 12 99 88 1 5 6 7 8 9 12 45 36 25 78 99 88 1 5 6 7 8 9 12 25 36 45 78 99 88 1 5 6 7 8 9 12 25 36 45 78 99 88 1 5 6 7 8 9 12 25 36 45 78 99 88 1 5 6 7 8 9 12 25 36 45 78 99 88 1 5 6 7 8 9 12 25 36 45 78 88 99 C:\Users\pc\source\repos\CPP_Selection_Sort_Algoritm-main\CPP_Selection_Sort_Algoritm-main\CPP_Selection_Sort_Algoritm\x64\Debug\CPP_Selection_Sort_Algoritm.exe (process 10044) exited with code 0. To automatically close the console when debugging stops, enable Tools->Options->Debugging->Automatically close the console when debugging stops. Press any key to close this window . . .
Adım adım çıktılarını incelerseniz C++ ve C# çıktılarının aynı olduğunu görebilirsiniz.
Selection Sort – Seçmeli Sıralama Algoritması yazımda bu kadar arkadaşlar.
Bugün bir çırpıda izleyip bitirdiğim ücretsiz bir kurs var. Bu bağlantıya tıklayarak kursa ulaşabilirsiniz. Bu derste verdiğim C# Selection Sorting ve C++ Selection Sorting kodları github profilimde paylaştım. Bağlantılarına tıklayarak projelere ulaşabilirsiniz.
Bu dersler Yapay Zeka temelinde olduğundan dolayı ilgili kategorinin derslerine ulaşmak için bağlantıya tıklayabilirsiniz. Ayrıca bu yazının PDF’ine buraya ve ya buraya tıklayarak ulaşabilirsiniz.
Diğer derslerde görüşürüz.
Bol Kodlu günler! ?