Elimizde sayılardan oluşan bir dizi olduğunu ve bu sayıları küçükten büyüğe sıralamak istediğimizi varsayalım. Çok fazla sıralama algoritması mevcut fakat bu yazımızda Selection Sort algoritmasını inceleyeceğiz.
Selection Sort
Selection Sort, elimizdeki listenin başındaki elemanı referans alarak diğer elemanlarla karşılaştırır(Bu işlemi dizi bitene kadar yapar). İlk kontrolde en küçük elemanı bulur ve bunu bir değişkende tutar. En baştaki elemanı, en küçük elemanı bulduğumuz yere taşır ve en küçük elemanı da referans noktasına(en başta 0.index) taşır. Daha sonra referans noktasını bir sağa kaydırır(1.index’e). Aynı şekilde referans noktasındaki değer ile dizinin diğer elemanlarını karşılaştırır ve en küçüğünü referans noktasına koyar. Böyle böyle sıralama işlemi dizi tamamlanıncaya kadar devam eder.
- Selection Sort’un çalışma süresi O(n^2)’dir. Bunun sebebi de 2 tane iç içe for döngüsü kullanıyor olmamızdır. Elimizde büyük veriler(Big Data) olduğu zaman bu algoritmayı kullanmak çokta mantıklı değildir. Ama küçük verilerde kullanılabilir. Başta söylediğim gibi çalışma zamanı çokta iyi olmayan bir sıralama algoritmasıdır. Bundan çok daha iyi çalışma sürelerine sahip sıralama algoritmaları elbetteki vardır. Bunları da ilerleyen zamanlarda inceleyeceğiz. (Kendiniz araştırmak isterseniz : Quick Sort, Merge Sort bakabilirsiniz.)
Kodu incelemek istersek;
class Program
{
static void Main(string[] args)
{
int[] dizi = { 2, 3, 1, 8, -6,-9 };
int temp=0;
for (int i = 0; i < dizi.Length; i++)
{
for (int j = i; j < dizi.Length; j++)
{
if (dizi[i]>dizi[j])
{
temp=dizi[j];
dizi[j] = dizi[i];
dizi[i] = temp;
}
}
}
foreach (int i in dizi)
{
Console.WriteLine(i);
}
}
}
EKRAN ÇIKTISI :
-9 -6 1 2 3 8
Kod nasıl çalışıyor? Adım adım
- Belirli sayıda elemanı olan bir int dizisi oluşturduk.
- temp=0 adında bir değişken oluşturduk.
- İç içe oluşturduğumuz iki for döngüsünde ilk for 0.indeksten başlayıp son indekse kadar dönüyor, ikinci for i.indeksten başlayıp son indekse kadar dönüyor. Bunun sebebi ilk forda i arttıkça i’nin solunda kalanlara tekrar bakmaya gerek yok bu yüzden ikinci foru i.ineksten başlatıyoruz.
- if kontrol bloğunu kullanarak, ilk fordaki dizi indeksindeki eleman ile ikinci fordaki dizi indeksindeki elemanı karşılaştırıyoruz. Eğer ilk fordaki eleman, ikinci fordaki elemandan küçükse if bloğuna giriyor.
- ikinci fordaki elemanı temp adında oluşturmuş olduğumuz değişkene atıyoruz. İlk fordaki elemanı ikinci fordaki elemana eşitliyoruz. En sonda ilk fordaki elemanı, temp değişkenindeki değer yapıyoruz. Bu işlemin amacı şudur,ilk fordaki dizi elemanıyla, 2.fordaki dizi elemanının yerini değiştirmektir. Ama ikisini birbirine eşitlediğimizde eşitlediğimiz değer bir yerde tutulmadığı için yok olur. Bunu önlemek için bu değeri temp adında bir değişkende tutuyoruz.
- İç içe 2 for döngüsü dönme işlemlerini tamamladığında dizimiz küçükten büyüğe sıralanmış olacaktır.
- foreach döngüsüyle dizi değişkenini gezerek ekrana yazdırıyoruz. Bu sayede ekrana, -9, -6, 1, 2, 3, 8 yazacaktır.
Aklınıza takılan soruları veya düşüncelerinizi aşağıda yorum olarak yazabilirsiniz.
Göz atmak istersen :
STRİNG SINIFI VE STRİNG METOTLARI C#
YAZILIM GELİŞTİRMEDE METOTLARIN KULLANIMI.
C# FOR DÖNGÜSÜ VE İÇ İÇE FOR DÖNGÜSÜ NASIL ÇALIŞIR?
Paylaşmak istersen?