İlginizi Çekebilir
  1. Ana Sayfa
  2. Artificial Intelligence - Yapay Zeka

Selection Sort – Seçmeli Sıralama Algoritması

Selection Sort – Seçmeli Sıralama Algoritması
Selection Sort – Seçmeli Sıralama Algoritması
+ - 0

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.

Selection Sort – Seçmeli Sıralama Algoritması

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.

Selection Sort – Seçmeli Sıralama Algoritması 2

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_calisma_Şekil

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;
        }

Seçmeli Sıralama Algoritması

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

Selection Sort

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! ?

Bu yazıya tepkiniz ne oldu?

Yazar Hakkında

Lise Ağ Sistemleri ve Yönetimi bölümü, üniversite Bilgisayar Programcılığı bölümü Ön Lisans, Yönetim Bilişim Sistemleri Lisans öğrenimi aldım. Askerlik görevimi tamamladım. Uzmanlık alanım; C# ve SQL Programlama dilleri ile müşteri odaklı, kullanıcı dostu ERP ve CRM gibi sistemleri geliştirmektir. Ayrıca şuanda PHP ve MYSQL alanında projeler geliştirmekteyim. C++, Phyton, Xamarin, MVC gibi konuları öğrenmek ve kendimi geliştirme çabası içerisindeyim. Discord için: https://discord.gg/FBxZeHu9

Değerli yorumlarınızı bekliyorum. :)