Shell sort merupakan Metode Pertambahan Menurun yang dikembangkan oleh Donald L. Shell
(1959).Metode ini mengurutkan data dengan cara membandingkan suatu data dengan data lain yang memiliki jarak tertentu sehingga
dibentuk sub-list, kemudian dilakukan pertukaran jika diperlukan.
Jarak yang digunakan disebut increment value, atau sequence number k
Misal sekuens: 5,3,1
Pengambilan sekuens bebas, asal menurun
• Jika k=5, maka sublistnya:
• Data[0], Data[5], Data[10], …
• Data[1], Data[6], Data[11], …
• Data[2], Data[7], Data[12], …
• Jika k=3, maka sublistnya:
• Data[0], Data[3], Data[6], …
• Data[1], Data[4], Data[7], …
• Data[2], Data[5], Data[8], …
Pemilihan Sequence number
1. Disarankan jarak mula-mula dari data yang akan dibandingkan adalah (N/2)+1)
2. Pada proses berikutnya, digunakan jarak (N/4)+1)
3. Pada proses berikutnya, digunakan jarak (N/8)+1)
4. Demikian seterusnya sampai jarak yang digunakan adalah 1
Proses Pengurutannya
1. Untuk jarak (N/2)+1:
- Data pertama (i=0) dibandingkan dengan data dengan jarak (N/2)+1. Apabila data pertama lebih besar dari data ke (N/2)+1) tersebut maka kedua data tersebut ditukar.
- Kemudian data kedua (i=1) dibandingkan dengan jarak yang sama yaitu (N/2)+1) = elemen ke-(i+N/2)+1
- Demikian seterusnya sampai seluruh data dibandingkan sehingga semua data ke-i selalu lebih kecil dari pada data ke-(i+N/2)+1
2. Ulangi langakah-langkah diatas untuk jarak = (N/4)+1 kemudian lakukan pembandingan dan pengurutan sehingga semua data ke-i lebih kecil daripada data ke-(i+N/4)+1
3. Ulangi langakah-langkah diatas untuk jarak = (N/8)+1 kemudian lakukan pembandingan dan pengurutan sehingga semua data ke-i lebih kecil daripada data ke-(i+N/8)+1
4. Demikian seterusnya sampai jarak yang digunakan adalah 1 atau data sudah terurut
Imports System.Console
Module Module9
Sub main()
Dim byk, k, l, m, n As Integer
Write("Banyak angka : ")
byk = ReadLine()
Dim h(byk - 1) As Integer
For k = 1 To byk
Write("Angka ke-{0} : ", k)
h(k - 1) = ReadLine()
Next
l = 0
Do
l = 3 * l + 1
Loop Until l > byk - 1
Do
l /= 3
For k = l To byk - 1
m = h(k)
n = k
Do While h(n - l) > m
h(n) = h(n - l)
n -= l
If n < l Then Exit Do
Loop
h(n) = m
Next
Loop Until l = 0
WriteLine()
WriteLine("Hasil : ")
For k = 1 To byk
Write(h(k - 1) & " ")
Next
ReadKey()
End Sub
End Module
(1959).Metode ini mengurutkan data dengan cara membandingkan suatu data dengan data lain yang memiliki jarak tertentu sehingga
dibentuk sub-list, kemudian dilakukan pertukaran jika diperlukan.
Jarak yang digunakan disebut increment value, atau sequence number k
Misal sekuens: 5,3,1
Pengambilan sekuens bebas, asal menurun
• Jika k=5, maka sublistnya:
• Data[0], Data[5], Data[10], …
• Data[1], Data[6], Data[11], …
• Data[2], Data[7], Data[12], …
• Jika k=3, maka sublistnya:
• Data[0], Data[3], Data[6], …
• Data[1], Data[4], Data[7], …
• Data[2], Data[5], Data[8], …
Pemilihan Sequence number
1. Disarankan jarak mula-mula dari data yang akan dibandingkan adalah (N/2)+1)
2. Pada proses berikutnya, digunakan jarak (N/4)+1)
3. Pada proses berikutnya, digunakan jarak (N/8)+1)
4. Demikian seterusnya sampai jarak yang digunakan adalah 1
Proses Pengurutannya
1. Untuk jarak (N/2)+1:
- Data pertama (i=0) dibandingkan dengan data dengan jarak (N/2)+1. Apabila data pertama lebih besar dari data ke (N/2)+1) tersebut maka kedua data tersebut ditukar.
- Kemudian data kedua (i=1) dibandingkan dengan jarak yang sama yaitu (N/2)+1) = elemen ke-(i+N/2)+1
- Demikian seterusnya sampai seluruh data dibandingkan sehingga semua data ke-i selalu lebih kecil dari pada data ke-(i+N/2)+1
2. Ulangi langakah-langkah diatas untuk jarak = (N/4)+1 kemudian lakukan pembandingan dan pengurutan sehingga semua data ke-i lebih kecil daripada data ke-(i+N/4)+1
3. Ulangi langakah-langkah diatas untuk jarak = (N/8)+1 kemudian lakukan pembandingan dan pengurutan sehingga semua data ke-i lebih kecil daripada data ke-(i+N/8)+1
4. Demikian seterusnya sampai jarak yang digunakan adalah 1 atau data sudah terurut
Imports System.Console
Module Module9
Sub main()
Dim byk, k, l, m, n As Integer
Write("Banyak angka : ")
byk = ReadLine()
Dim h(byk - 1) As Integer
For k = 1 To byk
Write("Angka ke-{0} : ", k)
h(k - 1) = ReadLine()
Next
l = 0
Do
l = 3 * l + 1
Loop Until l > byk - 1
Do
l /= 3
For k = l To byk - 1
m = h(k)
n = k
Do While h(n - l) > m
h(n) = h(n - l)
n -= l
If n < l Then Exit Do
Loop
h(n) = m
Next
Loop Until l = 0
WriteLine()
WriteLine("Hasil : ")
For k = 1 To byk
Write(h(k - 1) & " ")
Next
ReadKey()
End Sub
End Module
Comments
Post a Comment