Tek boyutlu bir diziyi rastgele sıralamak

Tek boyutlu bir diziyi rastgele sıralamak

Bir diziyi rastgele şekilde sıralama için kullanabileceğiniz etkili bir yöntemi bu yazıda bulabilirsiniz.

Bazen bir diziyi rastgele sıralamak isteyebilirsiniz.

int[] dizi = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

şeklinde bir dizimiz olduğunu varsayalım ve bu diziyi rastgele sıralayalım.

Aşağıdaki kodu incelerseniz bu işlemi rahatlıkla yapabildiğimizi göreceksiniz.

static void Main(string[] args)
{
    int[] dizi = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    RastgeleSiralama(dizi);
    for (int i = 0; i < dizi.Length; i++)
    {
        Console.Write(dizi[i] + " ");
    }
    Console.WriteLine();
}
 
private static void RastgeleSiralama(int[] dizi)
{
    for (int i = 0; i < dizi.Length; i++)
    {
        int t = dizi[i];
        int r = RandomNumber(dizi.Length - i);
        dizi[i] = dizi[i + r];
        dizi[i + r] = t;
    }
}
 
private static int RandomNumber(int max)
{
    using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
    {
        byte[] data = new byte[4];
        rng.GetBytes(data);
        int value = Math.Abs(BitConverter.ToInt32(data, 0)) % max;
        return value;
    }
}

Ekstradan ihtiyaç duyduğumuz tek konu, gerçek bir rastgele sayı üreteci. Bunu RandomNumber metodu ile gerçekleştirdik.

RastgeleSiralama metodunu incelediğimizde, i indexini birer birer arttırarak dizinin i. pozisyonuna, dizinin geriye kalan elemanlarından rastgele birini atadığımızı göreceksiniz.

ilk elemanı belirledikten sonra, sıradaki pozisyona tekrar geriye kalan elemanlardan birini rastgele yerleştiriyoruz.

Kolay ve hızlı bir yöntem.

Program çıktısı:

bir daha çalıştıralım:

 

Kaynak kodları indirmek için tıklayınız.

Herkese kolay gelsin. :)

 

Not:

Bu algoritmanın açıklamasını "Introduction to algorithms" sayfa 101 den bulabilirsiniz.