C#

C# Diziyi Rastgele Sıralama

Herkese merhaba, C# yazılarımıza kaldığımız yerden devam ediyoruz. Bu yazımızda C# ile bir diziyi rastgele bir şekilde sıralamayı anlatacağım. Hadi başlayalım !

C# gibi güçlü bir programlama dilinde birşeyi yapabilmek için birden çok olabiliyor ve bir diziyi sıralamak için de yazıyı yazarken aklıma gelen 2 farklı yolu var. Şimdi sırayla bunlardan bahsedelim.

Birinci Yol: Kendi Kodunu Yazma

İşlem Adımları ve Random Sınıfı

Birinci yol biraz uzun bir yol çünkü kendi kodumuzu yazacağız. Diziyi rastgele bir şekilde sıralamak istediğimiz için dizi üzerinde bir döngü ile dönecek ve her bir döngü adımında o anki dizi elemanını rastgele bir yere taşıyacağız. O taşıdığımız yerdeki eski veriyi de o anki alana koyacağız. Bu şekilde rastgele bir yer değiştirme yaparak dizinin sıralamasını değiştirecek ve istediğimiz şeye ulaşacağız. Rastgele yer değiştirmeleri de 0 ile dizi uzunluğu arasında rastgele bir sayı oluşturup o alana taşıma şeklinde yapacağız. Rastgele bir sayı üretebilmek için Random sınıfına ihtiyacımız olacak ve bu sınıfı kullanabilmek için yeni bir nesnesini türetmemiz gerekiyor. Yeni bir nesnesini constructor metodunu kullanarak yapabiliriz ve constructor metodu herhangi bir parametre istememekte. Ayrıca kullanabilmek için bir tane de integer dizisi oluşturalım.

Random rnd = new Random();
int[] dizi = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

Döngü İle Sıralama

Random sınıfı nesnesi ürettiğimize göre artık dizi üzerinde döngü ile gezebiliriz. Dizi elemanlarının index numaralarına ihtiyacımız olduğu için bu işlem için for döngüsü kullanmak daha mantıklı olacaktır. Döngünün her bir adımında öncelikle o anki veriyi yedekleyecek, sonra rastgele bir index numarası belirleyip o anki veriyi oraya taşıyacak ve son olarakta rastgele seçtiğimiz index numarasındaki alana ise yedeklediğimiz veriyi yazacağız. Döngü tamamlandığında rastgele bir yer değiştirme yapılacağından diziyi rastgele bir şekilde sıralamış olacağız. Rastgele bir sayı oluşturabilmek için az önce oluşturduğumuz rnd nesnesi altındaki Next() fonksiyonunu kullanacağız. Bu fonksiyonun kullanım şekillerinden biri olan double tipte tek parametre alan halini kullanacağız. Göndereceğimiz tek parametre ile birlikte sıfır ile gönderdiğimiz parametre arasında rastgele bir tam sayı oluşturulacaktır. Hadi o zaman kodunu yazalım;

for (int i = 0; i < dizi.Length; i++)
{
    int temp = dizi[i];
    int random = rnd.Next(dizi.Length - 1);
    dizi[i] = dizi[i + random];
    dizi[i + random] = temp;
}

Evet bu kodlar sayesinde dizimizi rastgele bir şekilde sıralamış bulunuyoruz.

İkinci Yol: Linq Kullanmak

İkinci yolumuz Linq kullanmak olacaktır. Linq ile az önce yaptığımız işlemleri tek satırda yapacağız. Bunun için dizi nesnesi altındaki OrderBy() eklenti fonksiyonunu kullanacağız. Bu fonksiyon içerisine bir tane fonksiyon alıyor ve aldığı fonksiyonun işlevine göre sıralama yapmakta. Biz rastgele bir sıralama yapmak istediğimiz için fonksiyonun içerisinde sadece rastgele bir sayı üreten kod satırı yazacağız. Bu işlemi az önce for döngüsü içerisinde de rnd.Next(dizi.Length) şeklinde kullanarak yaptık. OrderBy() eklenti fonksiyonu geriye IOrderedEnumerable tipinde bir değer döndürüyor yani bizim dizimizin veri tipini bozuyor. Tekrardan diziye çevirmek için ToArray() fonksiyonundan geçireceğiz. Bu fonksiyon IOrderedEnumerable tipinde olan diziyi tekrardan integer dizisine çevirecek. Ayrıca geriye veri döndürüldüğü için oluşan yeni dizi başlangıçtaki dizimizden farklı bir dizi olacağından tekrardan değişkene atama işlemi de yapmamız gerekiyor. Hadi kodunu yazalım;

dizi = dizi.OrderBy(x => rnd.Next(dizi.Length)).ToArray();

Birinci Yol vs İkinci Yol

Evet 2 farklı şekilde bir diziyi rastgele bir şekilde sıraladık. Birinci yöntemde yazdığımız kodlar daha uzun olsa da ikinci yöntemdekinden daha hızlı bir şekilde çalışmakta. Benim yaptığım testlerde birinci yöntem 0-1 milisaniye, Linq kullanarak yaptığımız ikinci yöntem ise 3-8 milisaniye sürmekte. Sayısal olarak baktığımızda arada çok fark var fakat süre olarak baktığımızda milisaniye olduğundan insan gözüyle farkedilemeyecek kadar hızlı gerçekleştirilmekte. Ayrıca ben integer dizisi kullanarak yaptım fakat aynı kodlarla diğer tiplerdeki dizileri de rastgele bir şekilde sıralayabilirsiniz.

C# ile bir diziyi rastgele bir şekilde sıralama bu şekilde yapılmakta. Tüm C# yazılarımıza buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.

Skorumuz:
Oy Vermek İçin Tıklayın
[Toplam: 0 Ortalama: 0]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu