Sıralama Algoritmaları: Insertion Sort

Hayatımızdaki işlemleri kolaylaştırmak için bazı nesneleri, sayıları belli özelliklerine göre sıralarız. Her alanda olduğu gibi, bilgisayar alanında da sık sık verileri sıralama ihtiyacı duyarız. Bu yüzdendir ki bilgisayarın icat edildiği ve aktif olarak kullanıldığı günden bugüne kadar, birçok sıralama algoritması türetilmiştir. Bu yazımda bu sıralama algoritmalarından Insertion Sortu sizlere anlatmaya çalışacağım. Öncelikle algoritmasını, ardından da Csharp kodunu yazının devamında görebilirsiniz.

Şekil üzerinde bu algoritmanın nasıl çalıştığı açık bir şekilde ortada ama ben sözlü olarak da anlatmak istiyorum. Eğer küçükten büyüğe sıralama yapıldığını düşünürsek. Algoritma, sayı dizisinin ikinci elemanını kendisine anahtar eleman olarak seçiyor. Bu anahtar eleman bir önceki elemandan başlayıp, kendinden önceki tüm sayılarla, anahtar olarak seçilen sayıyı kıyaslıyor. Kendinden büyük olan her sayıyla yerleri değiştiriyor. Kendinden küçük sayıyla karşılaştığında yer değiştirme işlemi bitiyor. Ardından dizinin son elemanına kadar anahtar sayı seçimi ve devamında anlattığım tüm işlemler devam ediyor. Insertion sort algoritması, adını doğal olarak algoritmanın işleyiş şeklinden almıştır. Algoritması da şu şekildedir: (←: Atama elemanı)
[cc lang = ‘csharp’]
for j ← 2 to length[A]
do anahtar ← dizi[j]
i ← j-1
while i>0 and anahtar < A[i] do A[i+1]←A[i] i ← i-1 A[i+1] ← anahtar [/cc] Algoritmayı bu şekilde ifade edebiliriz. Eğer algoritmayı anladıysanız, araya sokma algoritması ile sayı sıralama kodunu yazabilirsiniz. Ben Csharp dilinde yazdım, sıra sizde. İyi çalışmalar…
[cc lang = ‘csharp’]
using System;

namespace insertionSort
{
class Program
{
static void Main(string[] args)
{
int[] insertion = { 3, 7, 2, 5, 1, 4 };
int i, j, anahtar;
for (j = 1; j < insertion.Length; j++)
{
anahtar = insertion[j];
i = j – 1;
while (i >= 0 && anahtar < insertion[i]) { insertion[i + 1] = insertion[i]; i = i - 1; insertion[i + 1] = anahtar; } } for (i = 0; i < insertion.Length; i++) { Console.Write(insertion[i] + " "); } Console.WriteLine(); } } } [/cc]

Bir cevap yazın

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