Algoritma sorting
D
I
S
U
S
U
nOLEHNama :ISWAHYUNIMata Kuliah : Struktur DataNPM :
1111706STMIK BUDIDARMA MEDANTA 2011-2012
Sorting bisa didefinisikan sebagai suatu proses pengurutan data
yang sebelumnya disusun secara acak sehingga menjadi tersusun
secara teratur menurut suatu aturan tertentu. Sorting yang kita
terapkan menggunakan tipe data array agar pemahaman serta
pengimplementasiannya lebih mudah. Pada umumnya terdapat dua jenis
pengurutan :
- Ascending (Naik).Contoh : 2,3,10,15,22- Descending
(Turun).Contoh : 22,15,10,3,2Untuk melakukan proses pengurutan
tersebut dapat digunakan berbagai macam cara/metode.
1.Bubble Sort 2.Selection Sort 3.Merge Sort 4.Heap Sort 5.Shaker
Sort
Metode Pengurutan DataPengurutan berdasarkan perbandingan
(comparison-based sorting) Bubble sortPengurutan berdasarkan
prioritas (priority queue sorting method) Selection sort, heap
sortPengurutan berdasarkan penyisipan dan penjagaan terurut (insert
and keep sorted method) Merge SortPengurutan berkurang menurun
(diminishing increment sort method)
1.BUBBLE SORTMetode ini merupakan metode yang paling sederhana
dan paling tidak efisien, karena memerlukan waktu yang relatif
lebih lama dibandingkan dengan metode - metode yang lainnya. Konsep
dasar dari Bubble sort ialah membandingkan elemen yang sekarang
dengan elemen yang berikutnya, jika elemen sekarang > elemen
berikutnya (untuk ascending), maka dilakukan proses penukaran.
Proses sorting dapat dimulai dari data awal atau data akhir.Idenya
adalah :Lakukan pengulangan ( pass ) pada array, tukar elemen yang
bersebelahan jika diperlukan ( perbandingan nilainya tidak sesuai
); jika tidak ada pertukaran elemen maka array sudah terurut.Dalam
pass pertama, temukan elemen dengan nilai tertinggi ( maksimal )
dalam array dan tukarkan dengan elemen di sebelah kanannya dan
seterusnya sampai dengan mencapai posisinya di ujung array sebelah
kanan.Kemudian dalam pass kedua, nilai tertinggi kedua dalam array
akan ditempatkan dalam posisinya ( di sebelah kiri elemen dengan
nilai tertinggi ( maksimal ).Teruskan langkah ketiga sampai semua
elemen array terurut.
Berikut ini merupakan Procedure BubbleSort pada Pascal
:Procedure Bubble( Var Temp : Data; JmlData : Integer);Var I,J :
Integer;BeginFor I:=1 To JmlData DoFor J:=JmlData DownTo I DoIf
Temp[J]< Temp[J-1] Then {Untuk Descending >}SWAPTemp =
a[J-1];a[J-1] = a[J];a[J] = Temp;
End;
Langkah Langkah Bubble Sort Ascending
Langkah Langkah Bubble SortDescending
Contoh Sorting dengan Bubble
SortIterasiKeA[1]A[2]A[3]A[4]A[5]
Awal22101532
110221532
10152232
10153222
10153222
210153222
10315222
10321522
10321522
331021522
32101522
32101522
32101522
423101522
23101522
23101522
23101522
523101522
23101522
23101522
23101522
Akhir23101522
Di sini terlihat ketidakefisienan dari bubble sort yaitu harus
menyelesaikanJumMax 1 dari data. Sedangkan jika kita melihat dari
tabel diataspada iterasi keempat saja data sudah terurut dan
seharusnya pada saat itu proses sudah berhenti, tapi dengan bubble
sort proses harus dilakukan sampai looping selesai.Pada seluruh
prosedur yang menggunakan metode sorting pasti memerlukan prosedur
tambahan tukar data (Swap) untuk menukarkan dua buah elemen dalam
data. Berikut ini merupakan prosedur untuk menukarkan dua buah
data.
2.SELECTION SORTMirip dengan bubble sort, namun algoritma ini
lebih sedikit usaha untuk menempatkan setiap elemen ke
posisinya.Idenya :Pertama temukan elemen array terkecil ( minimum )
dan pertukarkan dengan elemen array di posisi ( indeks )
pertamaKemudian temukan elemen array terkecil kedua dan pertukarkan
dengan elemen array di posisi ( indeks ) keduaUlangi
langkah-langkah diatas sampai semua array terurut
Berikut ini merupakan Procedure Selection Sort pada Pascal
:Procedure selectionSort(var a : array[1..size] of integer
);varinteger i,j, min, tmp;beginfor( i:=1 to size-1) do beginfor (j
= i + 1 to size ) do beginmin = j;if (a[i] > a[min]) thenSWAPtmp
= a[i];a[i] = a[min];a[min] = a[i];end;end;end; { end of procedure
}
Langkah Langkah Selection Sort Ascending
Langkah Langkah Selection SortDescending
Contoh sorting dengan Selection SortIterasi
KeA[1]A[2]A[3]A[4]A[5]
Awal2210832
I=1, Lok=52108322
I=2, Lok=42381022
I=3, Lok=42381022
I=4, Lok=52381022
Akhir2381022
3.MERGE SORTAlgoritmaMerge Sortditemukan oleh John von Neumann
di tahun 1945. Merge Sort termasuk paradigma algoritma divide and
conquer (kurang lebih berarti: bagi dan atasi). Hal ini dikarenakan
algoritma ini melakukan pembagian struktur data sebelum kemudian
dioperasi satu per satu. Intinya, algoritma ini menggunakan dua ide
utama sebagai berikut, Sebuah list yang kecil membutuhkan langkah
yang lebih sedikit untuk pengurutan daripada sebuah list yang
besar.Untuk membentuk sebuah list terurut dari dua buah list
terurut membutuhkan langkah yang lebih sedikit daripada membentuk
sebuah list terurut dari dua buah list tak terurut. Contoh: hanya
diperlukan satu kali traversal untuk masing-masing list jika
keduanya sudah terurut.
Algoritma Merge SortAlgoritma Merge Sort sederhananya, dapat
ditulis berikut:a.Bagi list yang tak terurut menjadi dua sama
panjang atau salah satunya lebih panjang satu elemen.b.Bagi
masing-masing dari 2 sub-list secara rekursif sampai didapatkan
list dengan ukuran 1.c.Gabung 2 sublist kembali menjadi satu list
terurut.
Merge Sort dengan metode rekursifTerdapat 3 prosedur dalam
metode ini, yaitu prosedur merge sort,merge, dan insert.prosedur
mergesort
Langkah-langkahnya:1.Membagi 1 array menjadi 2 dengan cara: cari
tengahnya mid= (a+b) div 2 sehingga terdapat 2 bagian, (a,mid) dan
(mid+1,b) lakukan terus pembagian sampai pada leaves (daun) yang
tidak bisa dibagi lagi.2.Lakukan merge pada daun yang tidak bisa
dibagi lagi3.Kedua langkah diatas dilakukan apabia abendProsedur
InsertLangkah - langkahnya:1. Tentukan nilai yang akan diinsert
(k), lalu masukkan nilai dari elemen ke-k ke variabel temp.2.
Tentukan bahwa j=kposisi dari j sampai i+1 menggeser kekanan3.
Masukkan temp ke a[i]Berikut ini merupakan Procedure insert
:procedure insert(k,i)begintemp=a[k]for j=k downto
i+1a[j]=a[j-1]endfora[i]=tempend 4.Heap SortHeap Sort adalah sort
yang memanfaatkan prinsip Pohon Heap. Pohon Heap adalah pohon biner
complete dimana nilai yang terkandung dalam simpul bapak atau
Father (F) lebih besar atau lebih kecil dari nilai kedua buah
simpul anaknya atau simpul Son (5), sedangkan nilai simpul anak
cabang kiri bisa lebih besar, lebih kecil, atau sama dengan nilai
simpul anak cabang kanan.I.Contoh Pohon HeapII.Contoh Bukan Pohon
HeapIII.Sistem Penomoran Pada SimpulIV.Proses Pada Heap SortData
yang akan disort berada dalam array satu dimensi. Sudah diketahui
bahwa arraysatu dimensi dapat diilustrasikan atau dinyatakan dalam
pohon biner.Proses Heap Sort terdiri dari 2 tahap.Susunan data
dalam array diubah sedemikian rupa sehingga biladinyatakan dalam
pohon biner, maka pohonnya menjadi Pohon Heap. Setelah data dalam
array IBerbentukO Pohon Heap, kemudiandilakukan proses sort dengan
mempertahankan pohon tetap sebagaiPohon Heap, tapi nilai urut
menaik atau menurun berdasarkan nomor simpul.V.Proses Pada Heap
Sort1.Menyusun array menjadi pohon heap (secara lojik)Ilustrasi
penerapan algoritma untuk data array di atas, terlihat seperti di
bawah.Isi tabel menjadi:Isi tabel menjadi:Isi tabel menjadi:Datanya
menjadi :Hasil akhir pohon heap2.Mengurutkan array pohon
heapIlustrasi proses pengurutan sebagai berikut:Langkah Langkah
Heap Sort AscendingLangkah Langkah Heap SortDescending5.SHAKER
SORTAlgoritma Shaker sort merupakan improvement dari algoritma
pengurutan Bubble sort. Cara kerja dari algoritma ini hampir sama
dengan cara kerja dari algoritma Bubble Sort. Perbedaannya adalah
Shaker sort melakukan pengurutan array dari dua arah.Berikut ini
merupakan Procedure shaker sort :procedureShakeSort(varX :
ArrayType; N :integer);varL,R,K,J :integer;beginL :=2;R := N;K :=
N;repeatforJ := RdowntoLdoif(X[J] < X[J -1])thenbeginSwap(X[J],
X[J -1]);K := Jend;L := K +1;forJ := LtoRdoif(X[J] < X[J
-1])thenbeginSwap(X[J], X[J -1]);K := Jend;R := K -1;untilL >=
Rend;procedureSwap(varX, Y :integer);varTemp :integer;beginTemp :=
X;X := Y;Y := Tempend;Langkah Langkah Shaker Sort AscendingLangkah
Langkah Shaker SortDescending