Bu algoritma en temel ve basit sıralama algoritmasıdır.Genel olarak verilen n adet değer için n-1 adımda sıralama yapılır. Bu algoritmayı şu şekilde anlatabiliriz ;
Birinci adım : Bu adımda dizinin ilk elemanı dizinin diğer elemanları ile karşılaştırılır.İlk eleman karşılaştırıldığı eleman'dan küçükse dizideki bir sonraki elemana geçilir. Eğer dizideki eleman karşılaştırıldığı elemandan büyükse ilk eleman büyük olduğu elemanın yerine eleman ise dizinin ilk sırasına yerleştirirlir.Bu işlem dizinin son elemanınana kadar devam eder.Daha sonra ikinci adıma geçilir.
İkinci adım : Bu adımda dizinin ikinci elemanı dizinin diğer elemanları ile karşılaştırılır.İkinci eleman karşılaştırıldığı eleman'dan küçükse dizideki bir sonraki elemana geçilir. Eğer dizideki eleman karşılaştırıldığı elemandan büyükse ikinci eleman büyük olduğu elemanın yerine eleman ise dizinin ikinci sırasına yerleştirirlir.Bu işlem dizinin son elemanınana kadar devam eder.Daha sonra üçüncü adıma geçilir.
...
...
n-1 adım : Bu adımda ise dizinin n-1 inci sıradaki elemanı ile dizinin n ci elemanı karşılaştırılır.Eğer n. eleman'dan büyükse yer değiştirirler.Yoksa işlem sona erer.
Görüldüğü gibi n adet değer için n-1 adımda bir sıralama yapılıyor. Karşılaştırma sayısını bulmak istersek ;
1. adımda n-1 adet karşılaştırma yaptık.
2. adımda n-2 adet karşılaştırma yaptık.
3. adımda n-3 adet karşılaştırma yaptık.
....
....
n-2. adımda 2 karşılaştırma yaptık.
n-1. adımda 1 karşılaştırma yaptık.
Yani toplam karşılaştırma sayımız (n-1)+(n-2)+(n-3)+....+3+2+1 dir. n adet veriyi sıralamak için yapılan toplam karşılaştırma süresi o halde n*(n-1)/2 'dir. Örnek algoritmanın programını şu şekilde verebilriz ;
For i = 1 To p - 1
For j = i + 1 To p
If dizi(i) > dizi(j) Then
t = dizi(i)
dizi(i) = dizi(j)
dizi(j) = t
End If
Next j
Next i
Aşağıdaki örnek program ise Visual Basic'de bu algoritmanın uygulanmasını göstermektedir.
Formun general declarations kısmına aşagıdaki değerleri giriniz.Bunlar programda kullanacağımız degişkenlerdir.
Daha sonra form üzerine iki tane buton yerleştiriniz. Bunlardan birincisinin adını Dizi ikincisinin adını ise Sırala olarak değiştirin.Birinci butonun click event'ine aşağıdaki kodu giriniz.
İkinci butonun click event'ine ise aşağıdaki satırları yazınız.
Birinci adım : Bu adımda dizinin ilk elemanı dizinin diğer elemanları ile karşılaştırılır.İlk eleman karşılaştırıldığı eleman'dan küçükse dizideki bir sonraki elemana geçilir. Eğer dizideki eleman karşılaştırıldığı elemandan büyükse ilk eleman büyük olduğu elemanın yerine eleman ise dizinin ilk sırasına yerleştirirlir.Bu işlem dizinin son elemanınana kadar devam eder.Daha sonra ikinci adıma geçilir.
İkinci adım : Bu adımda dizinin ikinci elemanı dizinin diğer elemanları ile karşılaştırılır.İkinci eleman karşılaştırıldığı eleman'dan küçükse dizideki bir sonraki elemana geçilir. Eğer dizideki eleman karşılaştırıldığı elemandan büyükse ikinci eleman büyük olduğu elemanın yerine eleman ise dizinin ikinci sırasına yerleştirirlir.Bu işlem dizinin son elemanınana kadar devam eder.Daha sonra üçüncü adıma geçilir.
...
...
n-1 adım : Bu adımda ise dizinin n-1 inci sıradaki elemanı ile dizinin n ci elemanı karşılaştırılır.Eğer n. eleman'dan büyükse yer değiştirirler.Yoksa işlem sona erer.
Görüldüğü gibi n adet değer için n-1 adımda bir sıralama yapılıyor. Karşılaştırma sayısını bulmak istersek ;
1. adımda n-1 adet karşılaştırma yaptık.
2. adımda n-2 adet karşılaştırma yaptık.
3. adımda n-3 adet karşılaştırma yaptık.
....
....
n-2. adımda 2 karşılaştırma yaptık.
n-1. adımda 1 karşılaştırma yaptık.
Yani toplam karşılaştırma sayımız (n-1)+(n-2)+(n-3)+....+3+2+1 dir. n adet veriyi sıralamak için yapılan toplam karşılaştırma süresi o halde n*(n-1)/2 'dir. Örnek algoritmanın programını şu şekilde verebilriz ;
For i = 1 To p - 1
For j = i + 1 To p
If dizi(i) > dizi(j) Then
t = dizi(i)
dizi(i) = dizi(j)
dizi(j) = t
End If
Next j
Next i
Aşağıdaki örnek program ise Visual Basic'de bu algoritmanın uygulanmasını göstermektedir.
Formun general declarations kısmına aşagıdaki değerleri giriniz.Bunlar programda kullanacağımız degişkenlerdir.
Kod:
[FONT=Arial]Option Base 1
Dim dizi
Dim i, j, t, p As Integer[/FONT]
Daha sonra form üzerine iki tane buton yerleştiriniz. Bunlardan birincisinin adını Dizi ikincisinin adını ise Sırala olarak değiştirin.Birinci butonun click event'ine aşağıdaki kodu giriniz.
Kod:
[FONT=Arial]Private Sub Command1_Click()
'dizi gir
p = Val(InputBox("dizinin boyutunu giriniz"))
ReDim dizi(p)
For j = 1 To p
dizi(j) = Val(InputBox("Dizinin " & j & " elemanını giriniz", "Eleman"))
Next j
End Sub[/FONT]
İkinci butonun click event'ine ise aşağıdaki satırları yazınız.
Kod:
[FONT=Arial]Private Sub Command2_Click()
Print "Dizinin önceki hali"
For i = 1 To p
Print dizi(i); "-";
Next i
For i = 1 To p - 1
For j = i + 1 To p
If dizi(i) > dizi(j) Then
t = dizi(i)
dizi(i) = dizi(j)
dizi(j) = t
End If
Next j
Next i
Print
Print "Dizinin sıralanmış hali"
For i = 1 To p
Print dizi(i); "-";
Next i
End Sub[/FONT]

