Rendező algoritmusok
A kísérlet célja a különböző rendezési eljárások rendezési idejének, és hatékonyságának vizsgálata.
Rendezzen sorba véletlenszerűen 6 elemet tartalmazó tömböket különböző rendezési eljárások alkalmazásával! Mérje meg a különböző rendezési eljárásokkal lefuttatott rendezések futásidejét, és ezen mérési adatok alapján állapítsa meg, hogy az egyes esetekben melyik rendezési eljárás a hatékonyabb!
A kísérletet három rendezési eljárással kell megvalósítani:
1. Buborékos rendezés
Tárigény: n+1=7
Összehasonlítások száma: független a tömb előrendezettségétől n*(n-1)/2=15
Mozgatások száma: függ a tömb előrendezettségétől a legjobb esetben 0, legrosszabb esetben 3*n*(n-1)/2=45
2. Rendezés közvetlen kiválasztással
Tárigény: n+1=7
Összehasonlítások száma: független a tömb előrendezettségétől n*(n-1)/2=15
Mozgatások száma: független a tömb előrendezettségétől 3*n*(n-1)/2=45
Az algoritmus tanulmányozásakor látszik, hogy ebben a rendezési eljárásban sok felesleges csere történik, amely növeli a végrehajtási időt.
3. Rendezés minimum kiválasztással
Tárigény: n+1=7
Összehasonlítások száma: független a tömb előrendezettségétől n*(n-1)/2=15
Mozgatások száma: függ a tömb előrendezettségétől a legjobb esetben 3*(n-1)=15, legrosszabb esetben 33*(n-1)+n*n/4=24
Az algoritmus tanulmányozásakor látszik, hogy ebben a rendezési eljárásban a mozgatások száma az előző eljáráshoz képest jelentősen csökkent, tehát csökkent a végrehajtási idő is.
A programkód megvalósítása során a rendezendő elemeket egy tömbbe kell beolvasni a számláló ciklus segítségével, a tömb elemi egész típusúak. A rendezési eljárások megvalósításához a számláló ciklust, és az elágazást kell felhasználni.
Szükséges változók:
A tömb 6 elemű jele a().
Két ciklusváltozó jele: i, j
Egy változó az indexek tárolására. jele b.
Útmutatás:
A buborékos rendezés kódja:
Dim A(1 To 6) As Integer
Dim B As Integer
Dim i As Integer
Dim j As Integer
Private Sub Form_Load()
'BEOLVASÁS!
For i = 1 To 6
A(i) = InputBox("Add meg az A vektor következő elemét:")
Next i
'BUBORÉKOS RENDEZÉS
For i = 2 To 5
For j = 6 To i Step -1
If A(j - 1) > A(j) Then
B = A(j - 1)
A(j - 1) = A(j)
A(j) = B
End If
Next
Next
'KIIRATÁS
For i = 1 To 6
Me.List1.AddItem A(i)
Next i
End Sub
A Rendezés közvetlen kiválasztással kódja:
Dim A(1 To 6) As Integer
Dim B As Integer
Dim i As Byte
Dim j As Byte
Private Sub Form_Load()
'BEOLVASÁS!
For i = 1 To 6
A(i) = InputBox("Add meg az A vektor következő elemét:")
Next i
'RENDEZÉS KÖZVETLEN KIVÁLASZTÁSSAL
For i = 1 To 5
For j = i + 1 To 6
If A(j)
A(i) Then
B = A(j)
A(j) = A(i)
A(i) = B
End If
Next
Next
'KIIRATÁS
For i = 1 To 6
Me.List1.AddItem A(i)
Next i
End Sub
A Rendezés minimum kiválasztással kódja:
Dim A(1 To 6) As Integer
Dim Ertek As Integer
Dim i As Byte
Dim j As Byte
Dim Index As Byte
Private Sub Form_Load()
'BEOLVASÁS!
For i = 1 To 6
A(i) = InputBox("Add meg az A vektor következő elemét:")
Next i
'RENDEZÉS MINIMUM KIVÁLASZTÁSSAL
For i = 1 To 5
Index = i
Ertek = A(i)
For j = i + 1 To 6
If Ertek > A(j) Then
Ertek = A(j)
Index = j
End If
Next
A(Index) = A(i)
A(i) = Ertek
Next
'KIIRATÁS
For i = 1 To 6
Me.List1.AddItem A(i)
Next i
End Sub