pertemuan 5 SORT

Download Report

Transcript pertemuan 5 SORT

M. Ajir Muzakki, S.Si
Pengertian :


Sort adalah proses pengurutan data yang tersusun
secara acak menjadi data yang tersusun secara
teratur menurut aturan tertentu.
Urutan data dapat berbentuk Ancending (naik) atau
Descending(turun).
• Bila N obyek disimpan dalam larik L, maka pengurutan
menaik berarti menyusun elemen larik sedemikian
sehingga:
L[1] ≤ L[2] ≤ L[3] ≤ … ≤ L[N]
• Sedangkan pengurutan menurun berarti menyusun
elemen larik sedemikian sehingga:
L[1] ≥ L[2] ≥ L[3] ≥ … ≥ L[N]
• Data yang diurut dapat berupa data bertipe
numerik dasar atau tipe bentuk. Jika data bertipe
bentukan (rekaman), maka harus dijelaskan
berdasarkan field apa data tersebut diurutkan.
• Contoh:
(i) 23, 27, 45, 67 (data integer terurut menaik)
(ii) 25.12, 20.19,-12.20 (data riil terurut menurun)
(iii) Amir, Badu, Budi, Dudi (data string terurut manaik)
(iv) <08053110001, Eko, A>, < 08053110011,
Reza, C>, <08053110012, Sam, E> (data
mahasiswa terurut menaik berdasarkan field NIM
Keuntungan Data Terurut
• Mempercepat pencarian;
• Mudah menentukan data maksimum / minimum.
Pengurutan Terbagi Dua Kelompok:
• Pengurutan Internal adalah pengurutan terhadap
sekumpulan data yang disimpan di dalam memori
utama komputer. Umumnya struktur data yang
dipakai adalah larik, sehingga pengurutan internal
disebut juga pengurutan larik.
• Pengurutan Eksternal adalah pengurutan data yang
disimpan di dalam memori sekunder, biasanya data
bervolume besar sehingga tidak mampu dimuat
semuanya dalam memori komputer, disebut juga
pengurutan arsip (file), karena struktur eksternal
yang dipakai adalah arsip.
Metode Pengurutan Data
1.
2.
3.
4.
5.
6.
7.
8.
Bubble/Exchange Sort
Selection Sort(Maximum/Minimum Sort )
Insertion Sort
Quick Sort
Heap Sort;
Merge Sort;
Radix Sort;
Tree Sort, dan lain-lain.

Metode pengurutan gelembung diinspirasikan
oleh gelembung sabun yang berada dipermukaan
air. Karena berat jenis gelembung sabun lebih
ringan daripada berat jenis air, maka gelembung
sabun selalu terapung ke atas permukaan.

Metode ini dilakukan dengan cara
membandingkan elemen yang sekarang dengan
yang berikutnya, jika elemen berikutnya lebih
kecil maka elemen ditukar
Algoritma Pengurutan Gelembung
Untuk mendapatkan larik yang terurut menaik, proses yang dilakukan pada setiap
langkah sebagai berikut:
Langkah 1: Mulai elemen K =N, N-1, …, 2, bandingkan L[K] dengan L[K-1]. Jika L[K] <
L[K-1], pertukarkan L[K] dengan L[K-1]. Pada akhir langkah 1, elemen L[1] berisi
harga minimum pertama.
Langkah 2: Mulai elemen K =N, N-1, …, 3, bandingkan L[K] dengan L[K-1]. Jika L[K] <
L[K-1], pertukarkan L[K] dengan L[K-1]. Pada akhir langkah 2, elemen L[2] berisi
harga minimum kedua dan larik L[1..2] terurut.
Langkah N-1: Mulai elemen K =N, bandingkan L[K] dengan L[K-1]. Jika L[K] < L[K-1],
pertukarkan L[K] dengan L[K-1].
Pada akhir langkah N-1, elemen L[N-1] berisi harga minimum ke-(N-1) dan larik L[1..N-1]
terurut menaik, sehingga elemen yang tersisa adalah L[N] yang tidak perlu lagi
diurutkan karena hanya satusatunya.
procedure UrutGelembung(input/output L: Larik; input N : integer)
I : integer {pencacah untuk jumlah langkah}
K : integer {pencacah untuk pengapungan pada setiap langkah}
Temp : integer {peubah bantu untuk pertukaran}
Algoritma
for I ← 1 to N-1 do
for K ← N downto i+1 do
if L[K] < L[K-1] then {pertukarkan L[K] dengan L[K-1]}
Temp ← L[K]
L[K] ← L[K-1]
L[K-1] ← Temp
endif
endfor
endfor
Procedure TukarData (Var a,b : Word);
Var c : word;
Begin
c := a ;
a := b ;
b := c ;
End;
Procedure Asc_Buble (data : array; jmldata : integer);
Var
i,j : integer ;
Begin
For i := 2 to jmldata do
For j := jmldata downto i do
if data[j] < data[j-1] then
TukarData (data[j],data[j-1]
End;
Sedang untuk pengurutan secara descending dilakukan dengan mengganti
baris Ke-6
if data [j] > data [j-1]
Iterasi ke-1 (Langkah 1)
22
22
22
10
10
10
15
15
15
3
3
2
8
2
3
2
8
8
22
10
2
15
3
8
22
2
10
15
3
8
2
22
10
15
3
8
15
15
3
10
10
3
3
15
15
15
8
8
8
8
8
Iterasi ke-2 (Langkah 2)
2
2
2
2
2
22
22
22
22
3
10
10
10
3
22
Iterasi ke-3(Langkah 3)
2
2
2
3
3
3
22
22
22
15
10
8
15
8
10
8
15
15
2
3
8
22
10
15
22
22
10
10
10
22
15
15
15
Iterasi ke-4 (Langkah 4)
2
2
2
3
3
3
8
8
8
Iterasi ke-5 (Langkah 5
2
2
3
3
8
8
10
10
22
15
15
22
3
8
10
15
22
terurut
2
Selection Sort
Metode ini dilakukan dengan cara membandingkan
elemen sekarang dengan elemen berikutnya,jika
ditemukan elemen yang lebih kecil dari elemen
sekarang maka dicatat posisinya dan kemudian tukar
data dari posisi sekarang ke posisi yang terakhir
dicatat tsb.
Procedure Asc_Selection;
Var
min, pos : byte ;
Begin
for i := 1 to max – 1 do
Begin
pos := i ;
for j := i+1 to max do
If data [j] < data [pos] then pos := j;
If i <> pos then TukarData(data[i], data [pos]);
End;
End;
Sedang untuk pengurutan secara descending dilakukan dengan
mengganti baris Ke-8
if data [pos] < data [j] then pos := j;
Iterasi ke-1 (Langkah 1)
i= 1
22
2
10
3
15
Pembanding
4
3
5
8
6
2
8
22
Posisi
1
2
2
4
4
6
22 > 10
10 < 15
10 > 3
3 < 8
3 > 2
Posisi data ke-1 (22) = 6
Tukar data ke -1 dengan data ke-6
2
10
15
3
Iterasi ke-2 (Langkah 2)
i= 1
2
2
10
Pembanding
10 < 15
10 > 3
3 < 8
3 < 22
3
15
4
3
Posisi
2
4
4
4
5
6
8
22
8
22
Posisi data ke-4 (10) = 4
Tukar data ke -2 dengan data ke-4
2
3
15
10
Iterasi ke-3 (Langkah 3)
i= 1
2
3
2
3
15
Pembanding
15 > 10
10 > 8
8 < 22
Posisi data ke-3(15) = 5
4
10
Posisi
4
5
5
5
8
6
22
15
22
Tukar data ke -3 dengan data ke-5
2
3
8
10
Iterasi ke-4 (Langkah 4)
i= 1
2
3
4
5
6
2
3
8
10
15
22
Pembanding
Posisi
10 < 15
4
10 < 22
4
Posisi data ke-4 (10) tetap pada posisinya =4 (tidak berubah)
2
3
8
10
15
22
Iterasi ke-4 (Langkah 4)
i= 1
2
2
3
Pembanding
15 > 22
3
8
4
10
Posisi
5
5
15
6
22
Posisi data ke-5 (15) tetap pada posisinya =5 (tidak berubah)
2
3
8
10
15
22
Terurut
2
3
8
10
15
22
Dilakukan dengan cara membandingkan data ke-i (di
mana i dimulai dari data ke-2 sampai dengan data
terakhir) dengan data berikutnya. Jika ditemukan data
yang lebih kecil maka data tersebut disisipkan ke
depan sesuai dengan posisi yang seharusnya
Procedure Asc_Insert;
Var
i, j, temp : byte
Begin
For i := 2 to max do
Begin
Temp := data[i];
j :=i – 1;
While (data[j] > temp) and (j > 0) do
Begin
data[j + 1] := data [j];
dec(j)
End;
Data [j+1] := temp;
End;
End;
Sedang untuk pengurutan secara descending dilakukan dengan
mengganti baris Ke-8
While (data [ j ] < temp) and (j > 0) do
Iterasi ke-1 (Langkah 1)
i= 1
22
2
10
Temp
3
15
4
3
cek
10
5
8
6
2
Geser
Temp < 22
Data ke-1 → Posisi 2
Temp menempati posisi ke-1
10
22
15
3
8
2
4
3
5
8
6
2
Iterasi ke-2 (Langkah 2)
i= 1
10
2
22
Temp
3
15
cek
15
Geser
Temp < 22
Temp > 10
Data ke-2 → Posisi 3
Temp menempati posisi ke-2
10
15
22
3
8
2
Iterasi ke-3 (Langkah 3)
i= 1
10
2
15
3
22
4
3
Temp
3
cek
Temp < 22
Temp < 15
Temp < 10
Temp menempati posisi ke-1
3
10
15
22
5
8
6
2
Geser
Data ke-3 → Posisi 4
Data ke-2 → Posisi 3
Data ke-1 → Posisi 2
8
2
Iterasi ke-4 (Langkah 4)
i= 1
3
Temp
8
2
10
3
15
4
22
cek
Temp < 22
Temp < 15
Temp < 10
Temp > 3
Temp menempati posisi ke-2
3
8
10
15
5
8
6
2
Geser
Data ke-4 → Posisi 5
Data ke-3 → Posisi 4
Data ke-2 → Posisi 3
22
2
Iterasi ke-5 (Langkah 5)
i= 1
3
2
8
3
10
Temp
2
4
15
cek
Temp < 22
Temp < 15
Temp < 10
Temp < 8
Temp < 3
5
22
6
2
Geser
Data ke-5 → Posisi 6
Data ke-4 → Posisi 5
Data ke-3 → Posisi 4
Data ke-2 → Posisi 3
Data ke-1 → Posisi 2
Temp menempati posisi ke-1
2
3
8
10
15
22
Terurut
2
3
8
10
15
22
Dilakukan cara membandingkan suatu elemen (disebut pivot)
dengan elemen yang lain dan menyusunnya sedemikian
rupa sehingga elemen-elemen lain yang lebih kecil dari
pada pivot tersebut terletak disebelah kirinya dan elemen
lain yang lebih besar dari pada pivot terletak sebelah
kanannya.sehinggga terbentuk dua sublist yang terletak di
sebelah kiri dan kanan pivot.
Proses :
i bergerak dari sudut kiri ke kanan sampai mendapatkan
nilai >= pivot
j bergerak dari sudut kanan kekiri sampai menemukan
nilai < pivot
Iterasi ke-1 (Langkah 1)
i= 1
22
2
3
4
5
6
10
15
3
8
2
j
i
i berhenti pada indek ke-1 karena diperoleh nilai yang lebih besar
dari pivot (15)
j berhenti pada indek ke-6 karena diperoleh nilai yang lebih
kecil dari pivot (15)
Karena i < j maka data yang ditunjuk oleh I ditukar dengan data j
sehingga menjadi
2
10
15
3
8
22
Iterasi ke-2 (Langkah 2)
i= 1
2
2
3
4
5
6
10
15
3
8
22
j
i
i berhenti pada indek ke-3 karena tidak menemukan bilangan yang
lebih besar dari pivot (15)
j berhenti pada indek ke-5 karena diperoleh nilai yang lebih
kecil dari pivot (15)
Karena i < j maka data yang ditunjuk oleh i ditukar dengan data j
sehingga menjadi
2
10
8
3
15
22
Iterasi ke-2 (Langkah 2)
i= 1
2
2
3
4
5
6
10
8
3
15
22
j
i
i berhenti pada indek ke-2 karena tidak menemukan bilangan yang
lebih besar dari pivot (8)
j berhenti pada indek ke-4 karena diperoleh nilai yang lebih
kecil dari pivot (8)
Karena i < j maka data yang ditunjuk oleh i ditukar dengan data j
sehingga menjadi
2
3
8
10
15
22
Tugas
Tunjukan dengan Gambar cara pengurutan
sekumpulan data berikut ini secara ascending
dan sampai berapa iterasi yang diperlukan ?:
4 10
6
7
2
5
8
Gunakan metode :
- Buble short
- Quick Short