Algoritma dan Pemrograman Cp. 6 Sorting (ralat).ppt
1. wilis k - IFUPN"V"Yk
PENGURUTAN
(SORTING)
Algoritma dan Pemrograman Lanjut
Wilis Kaswidjanti
Informatika UPN “Veteran” Yk
2. wilis k - IFUPN"V"Yk
SORTING
• Sorting adalah suatu proses pengurutan
data yang sebelumnya disusun secara
acak atau tidak teratur menjadi urut
dan teratur menurut suatu aturan
tertentu.
• Biasanya pengurutan terbagi menjadi
dua yaitu :
– ascending (pengurutan dari karakter/angka kecil ke
karakter/angka besar).
– descending (pengurutan dari karakter/angka besar
ke karakter/angka kecil).
3. wilis k - IFUPN"V"Yk
Metode Sorting
Metode pengurutan langsung :
• Metode Penukaran (Exchange selection) /
Gelembung (Bubble Sort)
• Metode Seleksi (Straight Selection Sort)
• Metode Metode Penyisipan Langsung (Straight
Insertion Sort)
Metode pengurutan tidak langsung :
• Shell Sort
• Quick Sort
• Merge Sort
4. wilis k - IFUPN"V"Yk
Exchange selection /
Bubble Sort
• metode pertama yang paling banyak
dipelajari pemrogram.
• Sederhana
– bubble sort tidak efisien dan menyita banyak
waktu prosessor lebih banyak daripada teknik
sorting yang lain.
– tidak lebih dari 30 atau kurang dari 30
elemen, penggunaan bubble sort masih
sangat baik
5. wilis k - IFUPN"V"Yk
Exchange selection / Bubble Sort
• Metode gelembung / penukaran adalah metode
yang mendasarkan penukaran 2 buah elemen
untuk mencapai keadaan urut yang diinginkan
• Langkah-langkah :
1 : Baca array elemen yang diurutkan (N)
2 : Kerjakan langkah 3 untuk I=1 s/d N-1
3 : Kerjakan langkah 4 untuk J=1 s/d N-1
4 : Cek apakah A[J]>A[J+1}
5 : Selesai
8. wilis k - IFUPN"V"Yk
Program berikut memakai bubble sort untuk mengurutkan data array :
/* Bubble Sort */
#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
void bubble_sort(int array[], int size)
{int temp, i, j;
for (i=0; i<size-1; i++)
for (j=0; j<size-1-i; j++)
if (array[j] > array[j+1])
{
temp= array[j];
array[j]= array[j+1];
array[j+1]= temp;
}
}
9. wilis k - IFUPN"V"Yk
Straight Selection Sort
• Selection sort dimulai dengan menyelesaikan
elemen array (misalnya elemen pertama).
• Kemudian sorting mencari keseluruhan array
hingga menemukan nilai yang terkecil. Sorting
menempatkan nilai terkecil pada elemen
tersebut, memilih elemen kedua dan mencari
elemen terkecil kedua.
10. wilis k - IFUPN"V"Yk
Langkah-langkah Straight
Selection Sort
1 : Baca array elemen yang diurutkan (n)
2 : Kerjakan langkah-langkah 3 sampai langkah 5
untuk i=1 s/d n-1
3 : Tentukan lokasi awal data terkecil Mindeks =1;
kerjakan langkah 4 untuk j=i+1 s/d n
4 : Cari data terkecil dan catat lokasinya. Test
apakah AMindeks > Aj?
Jika ya, catat Mindeks = j
5 : Tukar nilai Amindeks dengan Aj
6 : Selesai
11. wilis k - IFUPN"V"Yk
Ilustrasi Straight Selection Sort
13. wilis k - IFUPN"V"Yk
void selectionSort(int arr[], int n)
{
int i, j, min_idx;
// One by one move boundary of
// unsorted subarray
for (i = 0; i < n-1; i++)
{
// Find the minimum element in
// unsorted array
min_idx = i;
for (j = i+1; j < n; j++)
if (arr[j] < arr[min_idx])
min_idx = j;
// Swap the found minimum element
// with the first element
swap(&arr[min_idx], &arr[i]);
}
}
14. wilis k - IFUPN"V"Yk
Straight Insertion Sort
Dapat dibagi menjadi 2 bagian
– Bagian sebelah kiri data sudah terurut (tujuan)
– Bagian sebelah kanan data belum terurut (sumber)
Langkah-langkah :
1 : Baca array elemen yang akan diurutkan (n)
2 : Kerjakan langkah 3 sampai langkah 6 untuk i : 1 s/d n-1
3 : Tentukan elemen yang akan disisipkan (Temp = A [i] ;
j = i-1;)
4 : Kerjakan langkah 5 selama temp <A [j] dan j >= 0;
5 : A [j+1]= A[j] ; j =j-1;
6 : Tempatkan elemen A [j+1] = Temp;
7 : Selesai
15. wilis k - IFUPN"V"Yk
Algoritma Straight Insertion Sort
Deklarasi
I,J,K,N : Integer
Temp : real
A : array [1..20] of real
Deskripsi
Input(N) {maksimal N=20}
K traversal [1..N]
Input (Af) {masukkan data sebanyak N}
I traversal [2..N]
Temp A1
J I-1
While (temp <Aj) and (J>=1) do
Aj+1 Aj
J J-1
Endwhile
Aj+1 Temp
17. wilis k - IFUPN"V"Yk
Shell Sort
Metoda ini memanfaatkan penukaran
sepasang elemen untuk mencapai
keadaan urut. Dua buah elemen
ditukarkan dengan jarak tertentu.
Rumus : ■ Jarak pertama = N / 2
■ Jarak berikutnya = jarak sebelumnya / 2
18. wilis k - IFUPN"V"Yk
Contoh :
A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9]
Sehingga :
■ Jarak pertama = 9 / 2 = 4
■ Jarak kedua = 4 / 2 = 2
■ Jarak ketiga = 2 / 2 = 1
24 46 11 26 57 38 27 20 17
22. Quick Sort
• Sering disebut dengan “partion exchange” sort.
• Langkah-langkah :
– Misal vektor A yang memiliki N elemen.
– Dipilih sembarang elemen, biasanya elemen pertama,
misal sebut saja X.
– Kemudian, semua elemen tersebut dengan menempatkan
X pada posisi J sedemikian rupa sehingga :
• elemen 1 s/d J-1 memiliki nilai lebih kecil dari X dan
• elemen ke J+1 s/d N memiliki nilai lebih besar dari X.
– Dengan demikian, terdapat dua buah subvektor.
• Contoh :
1 N
24 46 11 26 57 38 27 20 17
24. Merge Sort
Ide metode Merge Sort :
1. Pembagian array data menjadi dua bagian
(bagian kiri dan bagian kanan)
Ulangi langkah 1 secara rekursi terhadap
kedua bagian tersebut, sampai tiap subarray
hanya terdiri dari satu elemen.
2. Gabungkan masing-masing bagian itu
sekaligus mengurutkannya, sesuai pohon yang
terbentuk saat membagi array, sampai
membentuk array pertama saat sebelum
dibagi.
Ulangi langkah 2 secara rekursi pula.
25. wilis k - IFUPN"V"Yk
Ilustrasi Merge Sort
1 2 3 4 5 6 7
25 6 12 7 28 15 20
25 6 12 7 28 15 20
tengah =
(1+7) div 2
tengah tengah
I
25 6 12 7 28 15 20
tengah tengah
tengah
25 6 12 7 28 15 20
1
2
3
4
27. Algoritma MergeSortRekursi
Deklarasi
Type TipeData : Array[1..100] of integer
Data : TipeData
n,i : integer
Procedure MergeSort(input/output Data : TipaData;
input awal,akhir : integer)
Deskripsi
output(‘Banyaknya elemen array :’)
input(n)
i traversal[1..n]
Datai random(n)
output(‘Data yang belum terurut : ‘)
i traversal[1..n]
output(Datai)
MergeSort(Data,1,n)
output(‘Data yang sudah terurut :’)
i traversal[1..n]
output(Datai)
28. wilis k - IFUPN"V"Yk
Procedure MergeSort(input/output Data : TipaData;
input awal,akhir : integer)
Deklarasi Lokal
tengah : integer
Procedure Merge(input/output Data : TipaData;
input awalkiri,akhirkiri,
awalkanan,akhirkanan : integer)
Deskripsi
if (awal<akhir) then
tengah (awal+akhir) div 2
MergeSort(Data,awal,tengah)
MergeSort(Data,tengah+1,akhir)
Merge(Data,awal,tengah,tengah+1,akhir)
endif
29. Procedure Merge(input/output Data : TipaData;
input awalkiri,akhirkiri,
awalkanan,akhirkanan : integer)
Deklarasi Lokal
temp : TipeData
i,kiri,kanan : integer
Deskripsi
kiri awalkiri
kanan awalkanan
i awalkiri
while (kiri<=akhirkiri) or (kanan<=akhirkanan) do
if (Datakiri<=Datakanan) or (kanan>akhirkanan) then
tempi Datakiri
kiri kiri+1
endif
if (Datakiri>Datakanan) or (kiri>akhirkiri) then
tempi Datakanan
kanan kanan+1
endif
i i + 1
endwhile
i traversal[awalkiri..akhirkanan]
Datai tempi