Buradasınız

37-C# Sıralama Algoritmaları

c# dersleri

Sıralama Algoritması

 

Sıralama algoritması, karmaşık olarak girilmiş bir gurup değerin belirli bir düzende sıraya sokulma algoritmasıdır. Örneğin sayıların küçükten büyüğe, büyükten küçüğe, isimler A-Z yada Z-A sıralanma şeklinde denebilir.  Çok fazla sıralama algoritması bulunmaktadır. Sıralama algoritmalarını görmek için Kaynak 

Sıralama algoritmalarından Seçmeli (selection) sıralamadan bahsedeceğiz.

 

Seçmeli Sıralama Algoritması: Dizideki karmaşık değerleri ilk sıradan başlayarak küçük olan ile büyük olanın yerini değiştirme şeklinde yapılmaktadır.

 

sıralama algoritması

 

 Örnek: Bir dizinin seçmeli sıralama algoritması ile dizinin değerlerinin   küçükten büyüğe sıralanması. 5 elemanlı bir diziye değerler atayıp yapalım.

int gecici;
int[] sayilar = new int[5] { 3, 9, 12, 1, 7 };
Console.Write("Dizinin ilk hali: ");
foreach (int deger in sayilar)
{
            Console.Write(deger + " ");           
}
for (int i = 0; i < sayilar.Length-1; i++)
{
            for (int j = i; j < sayilar.Length; j++)
            {
            // >(büyük) işareti <(küçük ) olarak değiştirilirse büyükten küçüğe sıralanır
                        if (sayilar[i] > sayilar[j])                                              
                        {
                                    gecici = sayilar[j];
                                    sayilar[j] = sayilar[i];
                                    sayilar[i] = gecici;
                        }

            }

}
Console.WriteLine();
Console.Write("Dizinin son hali: ");
foreach (int deger in sayilar)
{
            Console.Write(deger + " ");
}
Console.ReadKey();

 

Örnek: 1 ile 100 arasında 25 sayıyı diziye atayıp bu sayıları sıralı şekilde ekrana yazdıralım.

int gecici;
// int[] sayilar = new int[6] { 4, 9, 12, 10, 1, 5 };
int[] sayilar = new int[25];
Random r = new Random();
for (int a = 0; a < sayilar.Length; a++)
{
    sayilar[a] = r.Next(1, 101);
}

Console.WriteLine("Dizinin İlk Hali;");
foreach (int sayi in sayilar)
{
    Console.Write("{0} ", sayi);
}
Console.WriteLine();

for (int i = 0; i < sayilar.Length-1; i++)
{
    for (int x = i + 1; x < sayilar.Length; x++)
    {
        if(sayilar[i]>sayilar[x])
        {
            gecici = sayilar[x];
            sayilar[x] = sayilar[i];
            sayilar[i] = gecici;
        }
    }
}
           
Console.WriteLine("Dizinin Son Hali;");
foreach (int sayi in sayilar)
{
    Console.Write("{0} ", sayi);
}
Console.ReadKey();

 

 

Dizilerde sıralama işlemi için Sort ve Reverse metotalrı kullanılarakta yapılabilir.

 

Dizi Sıralam

Array.Sort(Dizi);-> küçükten büyüğüe sıralama işlemi yapar.

Array.Reverse(Dizi);-> diziyi ters çevirir.

 

Yukarıdaki örneğimizi hazır metotlarla yapalım.

int[] sayilar = new int[5] { 3, 9, 12, 1, 7 };
Console.Write("Dizinin ilk hali: ");
foreach (int deger in sayilar)
{
            Console.Write(deger + " ");           
}
Array.Sort(sayilar);
Array.Reverse(sayilar);
Console.WriteLine();
Console.Write("Dizinin son hali: ");
foreach (int deger in sayilar)
{
            Console.Write(deger + " ");
}
Console.ReadKey();
 

Örnek:  10 elemanlı bir dizi oluşturularak 1 ile 100 arası RASTGELE sayılar atayınız. atanan değerleri ekranda yan yana gösteren ve küçükten büyüğe sıralanmış şekilde yazdıran C# programını yapınız.

int[] sayilar = new int[10];
Random r = new Random();
for (int i = 0; i < sayilar.Length; i++)
{
            sayilar[i] = r.Next(1, 101);
}
foreach (int sayi in sayilar)   
{
            Console.Write(sayi+ " ");              
}

// küçükten büyüğe sıralanmış şekilde de yazalım.

Array.Sort(sayilar);
Console.WriteLine();
foreach (int sayi in sayilar)   
{
            Console.Write(sayi + " ");
}
Console.ReadKey(); 

Örnek: 100 ile 500 arası rastgele 15 sayı tutulacak ve bir diziye aktarılacak. Dizideki elemanlar  normal tutulan şekilde yan yana  ekrana yazdırılacak, küçükten büyüğe sıralanmış şekilde yazdırılacak, büyükte küçüğe sıralanmış şekilde yazdıran C# kodunu yazınız.

int[] sayi=new int[15];
Random r = new Random();
for (int i = 0; i < sayi.Length; i++)
{
    sayi[i] = r.Next(100, 501);
}
foreach (int s in sayi)
{
    Console.Write(s + " ");//"{0} ",s
}
Console.WriteLine();
Console.WriteLine("Sayıları K<B sıralanışı için bir tuşa tıklayın");
Console.ReadKey();
Array.Sort(sayi);
foreach (int s in sayi)
{
    Console.Write(s + " ");//"{0} ",s
}
Console.WriteLine();
Console.WriteLine("Sayıları B<K sıralanışı için bir tuşa tıklayın");
Console.ReadKey();
Array.Reverse(sayi);
foreach (int s in sayi)
{
    Console.Write(s + " ");//"{0} ",s
}
Console.ReadKey();

Örnek: 1 ile 100 arasında 15 sayı bir diziye atanarak, klavyeden bir sayı girilmesi istenerek girilen sayının dizide bulunup bulunmadığını kontrol eden uygulamayı yapınız.

int[] sayilar = new int[15];
Random r = new Random();
bool durum = true;

for (int i = 0; i <sayilar.Length; i++)
{
    sayilar[i] = r.Next(1, 101);
    //Console.Write("{0} ",sayilar[i]);
}

Console.Write("Bir sayı giriniz:");
int sayi = int.Parse(Console.ReadLine());

for (int x = 0; x < sayilar.Length; x++)
{
    if (sayilar[x] == sayi)
    {
        Console.Write("Sayı bulundu"); durum = false; break;
    }               
}
if (durum == true) Console.Write("Sayı Bulunamadı");
Console.ReadKey();

 

Ödev: 10 elemanlı bir dizi oluşturularak.  1 ile 10 arası RASTGELE sayılar atayınız. Yeni 10 elemanlı bir dizi oluşturularak 1 ile 10 arasında klavyeden sayı giriniz. Dizilerdeki elemanları sırasıyla karşılaştırılarak eşit olanların değerlerini ekrana yazdırınız.

 

Ödev: Klavyeden bir sayı girilecek,  girilen sayı kadar 100 ile 500 arası rastgele sayı tutulacak ve bunlar bir diziye aktarılacak. En büyük ve En küçük sayı ekrana yazdıran C# kodunu yazınız.

 

Ödev: Klavyeden 10 arkadaşınızın isimin bir diziye atayın ve arkadaşlarınızın isimleri içinde e ve E harflerinin toplam sayısını bulunuz.

 

Yorumlar

kemal YEŞİM kullanıcısının resmi
kemal YEŞİM

Bunun Algoritmasını oluşturamadım.Yardım Edermisiniz.

talha kullanıcısının resmi
talha

a ve b dizisi var. a ve b dizisindeki elemanlar sıralıdır. bunları c dizisine atayıp bir yere kadar küçükten büyüğe sıralayıp o noktadan sonra büyükten küçüğe sıralayan algoritma.
örnek olarak
A[1,2,3,4,5]
B[6,7,8,9,10]
C[1,2,3,4,5,10,9,8,7,6]

recep kullanıcısının resmi
recep

Aşağıdaki sorunun cevabıdır. hazır dizi metotlar ile yapıldı.  hiç metot kullanılmadanda yapılabilir.

int[] A = new int[5] { 1, 2, 3, 4, 5 };
int[] B = new int[5] { 6, 7, 8, 9, 10 };

int[] C = new int[A.Length + B.Length]; //A ve B dizinlerinin uzunluklarını toplamı kadar, üçüncü diziyi oluşturduk.
Array.Reverse(B);  //dizi ters çevrildi.
A.CopyTo(C, 0);  //A dizini içindekiler C dizinine 0. index numarasında başlayarak yerleştirildi.
B.CopyTo(C, A.Length); //B dizini içindekiler C dizinine A dizinin den sonra yerleştirdik. index numarasında başlayarak yerleştirildi.

for (int i = 0; i < C.Length; i++)
    Console.WriteLine("{0}. sırada {1}  sayısı ", i, C[i]);
Console.ReadKey();

 

ali kullanıcısının resmi
ali

hocam heap ağacı var düğümlerde değerleri var sol alt ağaçtaki düğümlerin toplamı çif sağ alt ağacın düğümlerin toplamı çift ise sonuç 1 dönecek değilse 0 geri dönecek bununla ilgi bir örnek yaparsanız sevinirim

recep kullanıcısının resmi
recep

dizide elemanları yığın ağacına göre yerleştirerek son kalanlarımı  yoksa yığın ağacına göre sıraladıktan sonramı son kalanlar. aşağıdaki örnek üzerinde bir açıklama yapabilirsen

 

Safak kullanıcısının resmi
Safak

Klavyeden girilen 3 sayıdan büyüklük sıralamasına göre ortadakini bulup ekrana yazan program . yaparsaniz sevinirim

Yorum ekle

Konuyla İlgili Yazılar

c# dersleri

C# Metot Ödevleri

Ödev Soru 1: Klavyeden girilen sayıların tek mi çift mi olduğunu bulan ve sayı tek ise geri “Sayı Tektir.”, çiftse “Sayı Çifttir.” Mesajını geri... devamı...