Option Explicit
Sub BubbleSortASC(arrArray() As Double)
'**************************************************
'Purpose : Sort array ascending with Bubble Sort algorithm
'Input : Array
'Output : Array
'Date : 06.09.2002
'Author : Murat Aras
'**************************************************
'Kabarcık Sıralama(Bubble Sort) Algoritması :
'Dizinin elemanları üzerinden tekrar tekrar geçilir
've her geçiste sadece yan yana bulunan iki eleman arasında sıralama yapılır
've bu işlem tüm elemanlar sıralanıncaya kadar devam ettirilir.
'Dizinin başından sonuna kadar tüm elemanlar bir kez işleme tabi tutulduğunda
'dizinin son elemanı en büyük eleman haline gelecektir.
'Çünkü iç döngüde yer alan ve iki elemanı karşılaştırıp gerekli yer değiştirmeyi yapan işlem sayesinde
'dizinin en büyük elemanı dizinin neresinde bulunursa bulunsun en sağa dogru kaydırılmış olacaktır.
'Böylelikle bu iç döngünün bir kez işletimi sonucu en büyük eleman yerine yerleştirilmiş olacaktır.
'Bir sonraki tarama ise bu en sağdaki eleman dışarıda bırakılarak gerçekleştirilmektedir.
'Bu dışarıda bırakma işlemi de dış döngüdeki intCounter1 değişkeninin değerinin
'her işletimde bir azaltılmasıyla sağlanmaktadır.
'intCounter1 değişkeninin değeri 1 değerine ulaştığında ise
'dizinin solunda kalan son iki eleman da sıralanmakta ve sıralama işlemi tamamlanmaktadır.
'Kabarcık sıralama algoritmasını da belirli veriler için
'daha iyi performans gösterebilmesi için geliştirmek mümkündür.
'bu sıralama algoritmasında iç döngüde ikili sıralamalar yapılmaktadır.
'Eğer herhangi bir işletim aşamasında bu iç döngüde hiçbir yer değiştirme işlemi yapılmaz ise
'bu dizinin geriye kalan bölümünün sıralanmış olduğunu gösterecektir.
'Bu gerçekleştirimde iç döngüde herhangi bir yer değiştirmenin gerçekleşip gerçekleşmediği
'flag değişkeniyle gözlenmekte, eğer bir değişiklik gerçekleşmez ise sıralama işlemi sonlandırılmaktadır.
'Performans:
'Kabarcık sıralama algoritması ortalama N2/2 karşılaştırma ve N2/2 yer değiştirme işlemi gerçekleştirir
've bu işlem sayısı en kötü durumda da aynıdır.
'Kabarcık sıralama algoritmasının dış döngüsünün her işletiminde N-i adet karşılaştırma
've yer değiştirme gerçekleşmektedir. Bu işlemlerin toplamı da bize
'Seçerek sıralama algoritmasında olduğu gibi N2/2 sayısını vermektedir.
Dim intCounter1 As Integer 'Counter 1
Dim intCounter2 As Integer 'Counter 2
Dim intArraySize As Integer 'Array size
Dim dblTemp As Double 'Temp element
Dim intFlag As Integer 'Flag
'Get array size
intArraySize = UBound(arrArray())
'First counter start array size to 1
For intCounter1 = intArraySize - 1 To 1 Step -1
intFlag = 0 'Set flag
'Second counter start 1 to first counter
For intCounter2 = 1 To intCounter1
'Compare elements
If arrArray(intCounter2 - 1) > arrArray(intCounter2) Then
'If second element less then first element, swap them
dblTemp = arrArray(intCounter2 - 1)
arrArray(intCounter2 - 1) = arrArray(intCounter2)
arrArray(intCounter2) = dblTemp
intFlag = 1 'Elements have been swaped
End If
Next intCounter2
'if Elements have not been swaped then sorting is completed
If intFlag = 0 Then Exit For
Next intCounter1
End Sub
Kullanımları aşağıdaki şekildeki gibidir.
Dim arrDoubleArray() As Double
'Double degerlerden olusan dizi
'Bubble sort örneği
BubbleSortASC arrDoubleArray()
Sub BubbleSortASC(arrArray() As Double)
'**************************************************
'Purpose : Sort array ascending with Bubble Sort algorithm
'Input : Array
'Output : Array
'Date : 06.09.2002
'Author : Murat Aras
'**************************************************
'Kabarcık Sıralama(Bubble Sort) Algoritması :
'Dizinin elemanları üzerinden tekrar tekrar geçilir
've her geçiste sadece yan yana bulunan iki eleman arasında sıralama yapılır
've bu işlem tüm elemanlar sıralanıncaya kadar devam ettirilir.
'Dizinin başından sonuna kadar tüm elemanlar bir kez işleme tabi tutulduğunda
'dizinin son elemanı en büyük eleman haline gelecektir.
'Çünkü iç döngüde yer alan ve iki elemanı karşılaştırıp gerekli yer değiştirmeyi yapan işlem sayesinde
'dizinin en büyük elemanı dizinin neresinde bulunursa bulunsun en sağa dogru kaydırılmış olacaktır.
'Böylelikle bu iç döngünün bir kez işletimi sonucu en büyük eleman yerine yerleştirilmiş olacaktır.
'Bir sonraki tarama ise bu en sağdaki eleman dışarıda bırakılarak gerçekleştirilmektedir.
'Bu dışarıda bırakma işlemi de dış döngüdeki intCounter1 değişkeninin değerinin
'her işletimde bir azaltılmasıyla sağlanmaktadır.
'intCounter1 değişkeninin değeri 1 değerine ulaştığında ise
'dizinin solunda kalan son iki eleman da sıralanmakta ve sıralama işlemi tamamlanmaktadır.
'Kabarcık sıralama algoritmasını da belirli veriler için
'daha iyi performans gösterebilmesi için geliştirmek mümkündür.
'bu sıralama algoritmasında iç döngüde ikili sıralamalar yapılmaktadır.
'Eğer herhangi bir işletim aşamasında bu iç döngüde hiçbir yer değiştirme işlemi yapılmaz ise
'bu dizinin geriye kalan bölümünün sıralanmış olduğunu gösterecektir.
'Bu gerçekleştirimde iç döngüde herhangi bir yer değiştirmenin gerçekleşip gerçekleşmediği
'flag değişkeniyle gözlenmekte, eğer bir değişiklik gerçekleşmez ise sıralama işlemi sonlandırılmaktadır.
'Performans:
'Kabarcık sıralama algoritması ortalama N2/2 karşılaştırma ve N2/2 yer değiştirme işlemi gerçekleştirir
've bu işlem sayısı en kötü durumda da aynıdır.
'Kabarcık sıralama algoritmasının dış döngüsünün her işletiminde N-i adet karşılaştırma
've yer değiştirme gerçekleşmektedir. Bu işlemlerin toplamı da bize
'Seçerek sıralama algoritmasında olduğu gibi N2/2 sayısını vermektedir.
Dim intCounter1 As Integer 'Counter 1
Dim intCounter2 As Integer 'Counter 2
Dim intArraySize As Integer 'Array size
Dim dblTemp As Double 'Temp element
Dim intFlag As Integer 'Flag
'Get array size
intArraySize = UBound(arrArray())
'First counter start array size to 1
For intCounter1 = intArraySize - 1 To 1 Step -1
intFlag = 0 'Set flag
'Second counter start 1 to first counter
For intCounter2 = 1 To intCounter1
'Compare elements
If arrArray(intCounter2 - 1) > arrArray(intCounter2) Then
'If second element less then first element, swap them
dblTemp = arrArray(intCounter2 - 1)
arrArray(intCounter2 - 1) = arrArray(intCounter2)
arrArray(intCounter2) = dblTemp
intFlag = 1 'Elements have been swaped
End If
Next intCounter2
'if Elements have not been swaped then sorting is completed
If intFlag = 0 Then Exit For
Next intCounter1
End Sub
Kullanımları aşağıdaki şekildeki gibidir.
Dim arrDoubleArray() As Double
'Double degerlerden olusan dizi
'Bubble sort örneği
BubbleSortASC arrDoubleArray()
