Upload
others
View
19
Download
7
Embed Size (px)
Citation preview
Struktur Data Page i
S T R U K T U R D A T A
Pendidikan Teknologi InformasiUniversitas PGRI Semarang
KATA PENGANTAR
Buku Struktur Data ini memuat materi struktur data sederhana hingga struktur data
majemuk baik linier maupun non linier untuk mahasiswa Pendidikan Teknologi Informasi.
Buku ini diharapkan dapat memberikan pemahaman kepada mahasiswa mengenai konsep
struktur data, menganalisis dan mengimplementasikannya ke dalam baris program. Materi
yang disajikan pada buku ini diarahkan untuk membangun sikap dan keterampilan mahasiswa
yang disesuaiakan dengan kurikulum yang berlaku.
Semoga penyusunana buku ini memberikan banyak manfaat bagi dosen teknologi
informasi dan mahasiswa dalam meningkatkan keilmuan dan keterampilan. Kami menyadari
kalau buku ini masih banyak kekurangan dan keterbatasan. Saran dan masukan yang
membangun dari peserta didik dan praktisi pendidikan sangat kami harapkan untuk
meningkatkan kualitas buku ini.
Semarang, September 2015
Ika Menarianti, M.Kom
ii
Daftar Isi
KATA PENGANTAR............................................................................................................................. ii
Daftar Isi.............................................................................................................................................. iii
A. PENDAHULUAN.......................................................................................................................1
B. PENYAJIAN..............................................................................................................................2
1.1. Definisi Pengurutan (Sorting).................................................................................21.2. Metode Penyisipan Langsung (straight insertion sort).......................................31.1 Metode Penyisipan Langsung (straight insertion sort).......................................31.3. Metode Penyisipan Biner (binary insertion sort)..................................................51.4. Metode Seleksi (selection sort)..............................................................................61.5. Metode Gelembung (Bubble sort)..........................................................................81.6. Metode Shell..........................................................................................................101.7. Metode Quick.........................................................................................................13
C. PENUTUP............................................................................................................................... 16
Rangkuman........................................................................................................................................ 16
Latihan............................................................................................................................................... 18
Tes Formatif....................................................................................................................................... 19
Kunci Jawaban................................................................................................................................... 20
Tindak Lanjut......................................................................................................................................33
Daftar Pustaka................................................................................................................................... 33
Glosarium........................................................................................................................................... 33
Struktur Data Page iii
BAB V
SORTING
A. PENDAHULUAN
Bab ini membahas tentang pengurutan data (sorting). Pengurutan data merupakan
sebuah proses yang hampir selalu ada pada aplikasi yang menggunakan komputer.
Pengurutan data dilakukan untuk menyusun setiap baris data (record) dalam larik
program (array). Data dapat diurutkan secara urutan dari atas ke bawah (ascending),
misalnya A hingga Z, maupun diurutkan secara dari bawah ke atas (descending),
misalnya Z hingga A. Dalam proses pengurutan data terdapat beberapa metode
pengurutan seperti penyisipan langsung (straight insertion sort), penyisipan binary
(binary insertion sort), metode seleksi (selection sort), metode Quick,dan metode Shell.
Pada bab ini akan membahas pengurutan pada data larik.
Dengan melakukan pengamatan dan percobaan, mahasiswa diharapkan dapat
menganalisa proses pengurutan data dan mengimplementasikannya ke dalam bahasa
pemrograman. Dengan melakukan diskusi, mahasiswa diharapkan mampu mencari cara
paling mudah dalam menyelesaikan proses pengurutan data.
Materi tentang pengurutan data ini diberikan untuk memberi bekal kepada
mahasiswa untuk menganalisa proses masuknya data dalam sebuah aplikasi. Dengan
demikian materi ini dapat dijadikan sebagai dasar dalam melakukan pencarian data
(searching), menguraikan tumpukan data (stack), membuat daftar data (list) dan
mengatasi antrian data (queue).
Kompetensi dasar yang diharapkan adalah (1) Mahasiswa dapat mendeskripsikan
konsep pengurutan data (2) Mahasiswa dapat menganalisis cara kerja metode pengurutan
data (3) Mahasiswa dapat membuat notasi algoritmik metode pengurutan data (4)
Mahasiswa dapat mengimplementasikan semua metode kedalam bahasa pemrograman
Untuk dapat mencapai kompetensi dasar di atas, mahasiswa disarankan agar
memahami teori konsep pengurutan data. Langkah berikutnya adalah mengkaji materi
pada bab ini melalui bagian demi bagian dengan mengacu pada kompetensi dasar.
Mahasiswa dapat menambahkan catatan penting pada bagian tertentu, atau mencatat
kesulitan yang ditemukan untuk didiskusikan dengan teman atau ditanyakan kepada
Struktur Data Page 1
dosen pengampu. Mahasiswa dituntut mengerjakan latihan maupun soal-soal yang ada.
Selanjutnya, mencocokan pekerjaan dengan kunci jawab yang tersedia.
Untuk dapat mempelajari materi pengurutsn data dengan baik, mahasiswa
sebelumnya telah mendapatkan materi Algoritma Pemrograman.
B. PENYAJIAN
1.
2.
3.
4.
5.
Pengurutan data adalah untuk meletakkan kumpulan elemen data ke dalam urutan
tertentu, berdasarkan satu atau beberapa kunci dalam tiap-tiap elemen. Ada 2 macam
urutan dalam proses pengurutan yaitu Ascending dan Descending. Mengapa data harus
diurutkan? Agar mudah dilihat dan dibaca.
Proses pengurutan data dimulai dari mendeklarasikan baris program pada variabel.
Pada umumnya, indeks array dimulai dari 0, tetapi untuk memudahkan data akan
disimpan pada indeks ke 1. Tetapi ada bahasa pemrograman yang mewajibkan
penampung sementara sehingga digunakan indeks 0.
Baris program diatas menjelaskan tentang mendeklarasikan sebuah variabel
bernama Data dengan tipe Array bertipe data word dengan jangkauan 1..Max. Pada
beberapa metode pengurutan akan menemukan pemanggilan TUKAR. Kegunaan
prosedur ini adalah menukar isi dua variabel. Berikut definisi Tukar :
2
Procedure Tukar (var Data1, Data2 : word);Var
temp : word;Begin
temp := Data1;Data1 := Data2;Data2 := Data1;
End;
1.1. Definisi Pengurutan (Sorting)
Constmax = 1000 ;
VarData : Array [0 .. Max] of word;
Untuk contoh pengurutan data, akan selalu menggunakan data bilangan bulat
berjumlah sembilan yaitu:
12 35 9 11 3 17 23 15 31
Dimana akan kita urutkan data diatas menjadi urut naik, seperti;
3 9 11 12 15 17 23 31 35
Proses pengurutan dengan metode penyisipan langsung dapat dijelaskan sebagai
berikut: data di cek satu persatu mulai dari yang ke dua sampai dengan yang terakhir.
Apabila ditemukan data yang lebih kecil dari sebelumnya, maka data disisipkan ke posisi
yang sesuai.Misalnya; pengurutan kartu.
Algoritma penyisipan langsung dapat dituliskan sebagai berikut:
1. i 2
2. Selama (i<=N) kerjakan baris 3 sampai dengan10
3. x Data[i]
4. Data[0] x
5. j i – 1
6. Selama (x < Data[j] ) kerjakan baris 7 dan 8
7. Data [j+i] Data [j]
8. j j – 1
9. Data[j+1] x
10. i i + 1
Proses pengurutan dapat dijelaskan sebagai berikut:
Pada saat i = 2, x samadengan Data[2], yaitu 35 dan j=1. karena Data[1]=12 dan
35>12 maka proses dilanjutkan i=3
Struktur Data Page 3
1.2. Metode Penyisipan Langsung (straight insertion sort)
Pada saat i=3, x samadengan Data[3], yaitu 9 dan j=2. karena Data[2]=35 dan 9<35
maka dilakukan penggeseran sampai menemukan yang lebih kecil dari 9. Hasilnya,
Data[2]=12 dan Data[3]=35. Bagaimana dengan Data[1]? Data[1] = x yaitu 9.
Pada saat i=4, x samadengan Data[4], yaitu 11 dan j=3. karena Data[3]=35 dan
11<35, maka dilakukan penggeseran sampai ditemukan data yang lebih kecil dari 11.
Hasil penggeseran Data[3]=12 dan Data[4]=45, Data[2] diisi 11. Demikian
seterusnya.
Untuk lebih jelasnya, perhatikan proses pengurutan dengan metode penyisipan
langsung pada Tabel dibawah ini.
Tabel 1. Proses Pengurutan dengan metode penyisipan langsung
Mengapa diperlukan data[0]? Untuk berjaga-jaga apabila data yang sedang
dipindah lebih kecil daripada Data[1]. Contohnya pada saat i=3, data yang digeser adalah
9 yang lebih kecil dari 12. Apabila tidak ada Data[0] maka kondisi (x < Data[j]) akan
selalu terpenuhi, artinya kalang tidak pernah terpenuhi.
Berikut adalah contoh prosedur yang menggunakan metode penyisipan langsung:
4
Procedure StraightInsertionSort;Var i, j , x : word;Begin
for i := 2 to N dobegin
x := Data[i];Data[0] := x;j := i – 1;while (x < Data[j]) dobegin
Data[j + 1] := Data[j];dec (j);
end;Data[j + 1] := x;
end;End;
Metode Penyisipan Biner merupakan pengembangan dari metode sebelumnya,
idenya didasarkan pada pernyataan bahwa saat akan menggeser data ke-i, data ke 1
sampai i–1 sebenarnya sudah dalam keadaan urut. Sebagai contoh, pada saat i=4, didapat
data ke 1 sampai 3 sudah dalam keadaan urut: 9, 12, 35. Dengan demikian posisi dari data
ke i sebenarnya dapat ditentukan dengan pencarian biner.
Untuk lebih jelasnya, akan digunakan contoh pada saat i = 8 data yang akan
dipindah adalah 15 sedangkan data disebelah kiri 15 adalah:
3 9 11 12 17 23 35
Pertama, kita cari posisi paling tengah antara data. Data yang terletak ditengah
adalah data ke 4 yaitu 12. Karena12 < 15, berarti 15 harus disisipkan di sebelah kanan 12.
Oleh karena itu, proses pencarian dilanjutkan untuk data:
17 23 35
Hasil yang didapat adalah data tengahnya adalah 23. Karena 15 < 23 berarti 15
disisipkan disebelah kiri 23. proses dilanjutkan dengan data yang berjumlah1, yaitu 17.
Karena 17 > 15, berarti 15 disisipkan di sebelah kiri 17. Algoritma penyisipan biner
dapat dituliskan sebagai berikut:
1. i 2
2. Selama (i <= N ) kerjakan baris 3 sampai 14
3. x Data[i]
4. y 1
5. r i – 1
6. Selama (y <= r) kerjakan baris 7 dan 8
7. m (y + r ) / 2
8. Jika (x < Data[m]) maka r m – 1 , jika tidak 1 m + 1
9. j i – 1
10. Selama (j >= y) kerjakan baris 11 dan 12
11. A[j + i] mA [j]
Struktur Data Page 5
Procedure StraightInsertionSort;Var i, j , x : word;Begin
for i := 2 to N dobegin
x := Data[i];Data[0] := x;j := i – 1;while (x < Data[j]) dobegin
Data[j + 1] := Data[j];dec (j);
end;Data[j + 1] := x;
end;End;
1.
12. j j – 1
13. Data[y] x
14. i i + 1
Berikut adalah contoh prosedur yang menggunakan metode penyisipan biner:
Metode seleksi melakukan pengurutan dengan cara mencari data yang terkecil
kemudian menukarkannya dengan data yang digunakan sebagai acuan yang disebut pivot.
Proses pengurutan dapat dijelaskan sebagai berikut: mula – mula dilakukan pengulangan
dari 1 sampai dengan (N – 1). Tiap-tiap pengulangan dicari data yang paling kecil
diantara data ke (i+1) sampai data terakhir (=N). Data terkecil ditukarkan dengan pivot,
yaitu data ke-i. Apabila data terkecil tersebut lebih kecil dari data ke-i, proses penuakaran
tidak perlu dilakukan.
Algoritma metode seleksi dapat dituliskan sebagai berikut:
6
Procedure BinaryInsertionSort;Var
i, j, x : word;y, r, m : word;
Beginfor i := 2 to N dobegin x := Data[i]; y := 1; r := i – 1 ;
while (y <= r) dobegin m := (y + r) div 2; if ( x < Data[m] ) then r := m – 1 ; else y := m + 1 ;end;
for j := i – 1 downto 1 doData [ j + 1] := Data [j];
Data[y] := x;end;
End;
1.
1. i 1
2. Selama ( i <= N-1) kerjakan baris 3 sampai 9
3. k i
4. j i + 1
5. Selama ( j <= N) kerjakan baris 6 dan 7
6. Jika (Data[k] > Data[j]) maka k j
7. j j + 1
8. Tukar Data[i] dengan Data[k]
9. i i + 1
Proses pengurutan dapat dijelaskan sebagai berikut:
Saat i=1, data yang terkecil diantara data ke-2 sampai 9 adalah data ke-5, yaitu 3.
Kemudian data ke-1 yaitu 12 ditukar dengan data ke-5 yaitu 3.
Saat i=2, data yang terkecil diantara data ke-3 sampai 9 adalah data ke-3, yaitu 9.
Kemudian data ke-2 yaitu 35 ditukar dengan data ke-3 yaitu 9.
Saat i=3, data yang terkecil diantara data ke-4 sampai 9 adalah data ke-4, yaitu 11.
Kemudian data ke-3 yaitu 35 ditukar dengan data ke-4 yaitu 11. Demikian seterusnya.
Untuk lebih jelasnya perhatikan proses pengurutan dengan metode seleksi yang
disajikan pada tabel 2.
Tabel 2. Proses pengurutan metode seleksi
Iterasi Data [1]
Data [2]
Data [3]
Data [4]
Data [5]
Data [6]
Data [7]
Data [8]
Data [9]
Awal 12 35 9 11 3 17 23 15 31
i=1 12 35 9 11 3 17 23 15 31
i=2 3 35 9 11 12 17 23 15 31
i=3 3 9 35 11 12 17 23 15 31
i=4 3 9 11 35 12 17 23 15 31
i=5 3 9 11 12 35 17 23 15 31
i=6 3 9 11 12 15 17 23 35 31
i=7 3 9 11 12 15 17 23 35 31
i=8 3 9 11 12 15 17 23 35 31
Akhir 3 9 11 12 15 17 23 31 35
Struktur Data Page 7
Berikut adalah contoh prosedur yang menggunakan metode seleksi:
Metode gelembung disebut juga metode penukaran (exchange sort) mengurutkan
data dengan cara membandingkan masing – masing data, kemudian dilakukan penukaran
jika perlu. Proses pengurutan dilakukan dengan menggunakan dua kalang. Kalang
pertama melakukan pengulangan dari 2 sampai dengan N-1 (misalkan dengan variabel i).
Sedangkan kalang ke 2 dari N sampai dengan i (misalkan dengan variabel j). Pada
masing-masing pengulangan, data ke ( j – 1) dibandingkan dengan data ke – j. Apabila
data ke (j – 1) lebih besar daripada data ke – j, kedua data ditukar.
Algoritma penyisipan metode gelembung adalah sebagai berikut:
1. i 2
2. Selama (j<=N) kerjakan baris 3 sampai 7
3. j N
4. Selama (j>=i) kerjakan baris 5 sampai 7
5. Jika (Data[j-1] > Data[j]) maka tukar Data[j-1] dengan Data[j]
6. jj+1
7. ii + 1
8
Procedure SelectionSort;Var
i, j, k : word;Begin
for i := 1 to N – 1 dobegin
k := i;for j := i + 1 to N do
if (Data[k] > Data[j]) then k := j;
Tukar (Data[i], Data[k]);end;
End;
1.
Proses pengurutan dapat dijelaskan sebagai berikut:
• Saat i=2, nilai j diulang dari 9 sampai dengan 2, pengulangan pertama Data[9]
dibandingkan dengan Data[8]. Karena 15 < 31 proses dilanjutkan. Pengulangan kedua
Data[8] dibandingkan dengan Data[7], karena 23 > 15 maka Data[7] dan Data[8] ditukar
dan seterusnya sampai j=2.
• Pada saat i = 3, nilai j diulang dari 9 sampai dengan 3. Pada pengulangan pertama data[9]
dibandingkan dengan data[8]. Karena 23 < 31, maka proses dilanjutkan. Pada
pengulangan kedua data[8] dibandingkan data[7]. Karena 17 > 23, maka proses
dilanjutkan. Pada saat j = 4, data[4] dibandingkan dengan data[3]. Karena 35 > 9, maka
data[3] dan data[4] ditukar. Demikian seterusnya sampai j = 3.
Untuk lebih jelasnya perhatikan proses pengurutan dengan metode gelembung
yang disajikan pada tabel 3.
Tabel 3. Proses pengurutan metode gelembung
Iterasi Data [1]
Data [2]
Data [3]
Data [4]
Data [5]
Data [6]
Data [7]
Data [8]
Data [9]
Awal 12 35 9 11 3 17 23 15 31
i=2 12 35 9 11 3 17 23 15 31
j=8 12 35 9 11 3 17 23 15 31
j=7 12 35 9 11 3 17 15 23 31
j=5 12 35 9 11 3 15 17 23 31
j=4 12 35 9 3 11 15 17 23 31
j=3 12 35 3 9 11 15 17 23 31
j=2 12 3 35 9 11 15 17 23 31
i=3 3 12 35 9 11 15 17 23 31
j=4 3 12 35 9 11 15 17 23 31
j=3 3 12 9 35 11 15 17 23 31
i=4 3 9 12 35 11 15 17 23 31
j=5 3 9 12 35 11 15 17 23 31
i=5 3 9 12 11 35 15 17 23 31
j=6 3 9 12 11 35 15 17 23 31
i=6 3 9 12 11 15 35 17 23 31
Struktur Data Page 9
j=7 3 9 12 11 15 35 17 23 31
i=7 3 9 12 11 15 17 35 23 31
j=8 3 9 12 11 15 17 35 23 31
i=8 3 9 12 11 15 17 23 35 31
j=9 3 9 12 11 15 17 23 35 31
Akhir 3 9 12 11 15 17 23 31 35
Berikut adalah contoh prosedur yang menggunakan metode gelembung:
Diambil dari nama penciptanya, yaitu D.L.Shell (1959). Metode ini mengurutkan
data dengan cara membandingkan suatu data dengan data yang lain yang memiliki jarak
tertentu, kemudian dilakukan penukaran jika diperlukan. Prosesnya:
1. Menentukan jarak mula-mula dari data yang dibandingkan, yaitu N / 2. Lakukan
pengulangan dari 1 sampai N/2.
2. Masing – masing pengulangan dilakukan pembandingan antara data ke-j dengan data
ke-(j+N/2).
3. Apabila data-j lebih besar dari data (j + N/2 ) maka data ditukar.
4. Data diulang sampai semua data ke-j selalu lebih kecil dari data ke (j + N / 2)
5. Gunakan jarak (N/2)/2 atau N/4.
6. Lakukan pengulangan dari 1 sampai (N-N/4) atau 3.N/4
7. Masing – masing pengulangan dilakukan pembandingan antara data ke-j dengan data
ke-(j+N/4), apabila diperlukan data ditukar.
10
Procedure BubbleSort;Var
i, j : word;Begin
for i := 2 to N – 1 do for j := N downto 1 do
begin if ( Data[j – 1] > Data[j]) then Tukar (Data[j – 1], Data[j]);end;
end.
1.
8. Pengulangan dari 1 sampai 3.N/4 dilakukan sampai semua data ke-j lebih kecil dari
data ke-(j+N/4).
Algoritma penyisipan metode shell adalah sebagai berikut:
1. Lompat 2
2. Selama (Lompat >1) kerjakan baris 3 sampai 9
3. Lompat Lompat/2. Sudah false
4. Kerjakan baris 4 sampai dengan 8 sampai (Sudah=true)
5. Sudah true
6. j 1
7. Selama (j<=N - Lompat) kerjakan baris 8 dan 9
8. Jika (Data[j] > Data[j+lompat] maka tukar Data[j], Data[j+Lompat], Sudah false
9. j j + 1
Untuk lebih jelasnya perhatikan proses pengurutan dengan metode shell yang
disajikan pada tabel 4.
Tabel 4. Proses pengurutan dengan metode shell
Iterasi Data [1]
Data [2]
Data [3]
Data [4]
Data [5]
Data [6]
Data [7]
Data [8]
Data [9]
Awal 12 35 9 11 3 17 23 15 31
Jarak =4 12 35 9 11 3 17 23 15 31
j = 1 12 35 9 11 3 17 23 15 31
j = 2 3 35 9 11 12 17 23 15 31
Jarak =2 3 17 9 11 12 35 23 15 31
j = 2 3 17 9 11 12 35 23 15 31
j = 6 3 11 9 17 12 35 23 15 31
Jarak =2 3 11 9 17 12 15 23 35 31
j = 4 3 11 9 17 12 15 23 35 31
Jarak =1 3 11 9 15 12 17 23 35 31
j = 2 3 11 9 15 12 17 23 35 31
j = 4 3 9 11 15 12 17 23 35 31
j = 8 3 9 11 12 15 17 23 35 31
Akhir 3 9 11 12 15 17 23 31 35
Struktur Data Page 11
Proses pengurutan dapat dijelaskan sebagai berikut:
Saat jarak=4, j diulang dari 1 sampai 5. Pengulanganpertama, Data[1] dibandingkan
Data[5] karena 12 > 3 maka data ditukar. Pengulangan kedua Data[2] dibandingkan
dengan Data[6] karena 35 > 17 maka data ditukar. Pengulangan ketiga Data[3]
dibandingkan dengan Data[7] karena 9 > 23 data tidak perlu ditukar. Demikian seterusnya
sampai j.
Pada saat jarak = 2, j diulang dari 1 sampai 7. Pengulanganpertama, Data[1] dibandingkan
Data[3] karena 3>9maka data ditukar. Pengulangan kedua Data[2] dibandingkan dengan
Data[4] karena 17> 11 maka data ditukar. Demikian seterusnya sampai j = 7. Perhatikan
bahwa pengulangan untuk jarak = 2 harus diulang lagi karena ternyata data[4] masih lebih
besar daripada data[6]. Demikian seterusnya.
Berikut adalah contoh prosedur yang menggunakan metode shell:
12
Procedure ShellSort;Var
Sudah : boolean;Lompat, i , j : word;
BeginLompat := N;while (Lompat > 1) dobegin Lompat := Lompat div 2;
repeat Sudah := true;
for j := 1 to N – Lompat dobegin i := j + Lompat; if (Data[j] > Data[i]) then begin Tukar (Data[j], Data[i]); Sudah := false;end;
end;Until Sudah;end;
End;
Disebut juga metode partisi ditemukan C.A.R Hoare (1962) dimana jarak dari
kedua elemen yang ditukarkan cukup besar dengan tujuan untuk mempertinggi
efektivitasnya.Proses pengurutan dengan metode quick dimulai dengan memilih data
yang dinamakan pivot misalnya x. Pivot diletakkan pada posisi ke-j hingga data antara 1
sampai (j–1) lebih kecil daripada x, sedangkan data pada posisi ke (j+1) sampai N lebih
besar daripada x. Cara pengaturannya adalah menukarkan data diantara posisi 1 sampai
dengan (j – 1) yang lebih besar daripada x dengan data diantara posisi (j+1) sampai
dengan N yang lebih kecil daripada x.
Algoritma penyisipan metode quick adalah sebagai berikut:
1. x Data[(L+R)/2]
2. i L
3. j R
4. Selama (i<=j) kerjakan baris 5 sampai 12
5. Selama (Data[i]<x) kerjakan i i + 1
6. Selama (Data[j] > x) kerjakan j j + 1
7. Jika (i<=j) kerjakan baris 8 sampai 10, jika tidak kerjakan baris 11
8. Tukar Data[i] dengan Data[j]
9. i i + 1
10. j j – 1
11. Jika (L < j) kerjakan lagi baris 1 dengan R=j
12. Jika (i < R) kerjakan lagi baris 1 dengan L=i
Proses pengurutan metode quick dapat dijelaskan sebagai berikut:
a) Mula-mula diambil L=1 dan R=9 serta pivot adalah data ke-5 yaitu 3. Tujuan
pemilihan pivot adalah mengatur data disebelah kiri agar lebih lecil daripada pivot
dan data disebelah kanan agar lebih besar daripada pivot. Kita harus mencari data
disebelah kiri pivot yang lebih besar dari 3.
b) Ternyata data ke-1 yaitu 12. kita tidak akan dapat nilai yang lebih kecil dari 3.
Sekarang 3 harus ditukar dengan 12.
Struktur Data Page 13
1.
12 35 9 11 3 17 23 15 31
3 35 9 11 12 17 23 15 31
c) Langkah selanjutnya, membuat dua kumpulan data baru berdasarkan hasil diatas.
Kumpulan data pertama adalah data yang memiliki indeks 1 sampai 5 – 1 = 4, yaitu :
3 35 9 11
d) Kumpulan data kedua adalah data yang memiliki indeks 1 + 1 = 2 sampai dengan 9.
Kumpulan data kedua belum bisa ditentukan karena masih tergantung pengurutan data
pertama.
e) Kumpulan data pertama harus mencari pivot kemudian menggunakan aturan yang
serupa. Pivotnya adalah data ke 2 yaitu 35. disebelah kiri tidak ada yng lebih kecil
dari 35 sedang di kanan 11 adalah lebih kecil dari 35, maka 35 harus ditukar dengan
11.
f) Selanjutnya buat dua kumpulan data lagi. Kumpulan pertama punya indeks 1 sampai
4–1 = 3 adalah sebagai berikut:
3 11 9
g) Pivotnya adalah 11. Apabila data disebelah kananlebih kecil maka data harus ditukar.
Jadi 11 ditukar dengan 9.
h) Kumpulan kedua punya indeks dari 2 + 1 = 3 sampai 4 yaitu 11 dan 35. data tidak
ditukar karena sudah urut. Kumpulan kedua memiliki indeks 2 sampai 9 , yaitu
9 11 35 12 17 23 15 31
i) Pivotnya 12, jika dilakukan proses yang sama maka 35 dan 12 harus ditukar.
3 9 11 35 15 17 23 35 31
3 9 11 12 35 17 23 35 31
j) Dari hasilnya kita bagi menjadi dua kumpulan data. Pertama memiliki indeks 2
sampai 4, dan tidak perlu diurutkan karena sudah urut. Kedua memiliki indeks 5
sampai 9
14
Untuk lebih jelasnya perhatikan proses pengurutan dengan metode quick yang
disajikan pada tabel 5.
Tabel 5. Proses pengurutan dengan metode quick
Berikut adalah contoh prosedur yang menggunakan metode quick:
Struktur Data Page 15
Procedure QuickSort(L, R : word);Var
i, j, x : word;Begin
x := Data [(L+R) div 2];i := L;j := R;while (i<=j) dobegin
while (Data[i] < x) doinc (i);while (Data[j] > x) dodec (j);
if (i <= j) thenbegin Tukar (Data[i], Data[j]); inc(i); dec(j);end;end;
If (L < j) then QuickSort (L,j);
If (i < R) thenQuickSort (i,R);
C. PENUTUP
16
Procedure QuickSort(L, R : word);Var
i, j, x : word;Begin
x := Data [(L+R) div 2];i := L;j := R;while (i<=j) dobegin
while (Data[i] < x) doinc (i);while (Data[j] > x) dodec (j);
if (i <= j) thenbegin Tukar (Data[i], Data[j]); inc(i); dec(j);end;end;
If (L < j) then QuickSort (L,j);
If (i < R) thenQuickSort (i,R);
Rangkuman
1. Pengurutan data adalah meletakkan kumpulan elemen data ke dalam
urutan tertentu, berdasarkan satu atau beberapa kunci dalam tiap-tiap
elemen.
2. Ada 2 macam urutan dalam proses pengurutan yaitu Ascending dan
Descending.
3. Proses pengurutan dengan metode penyisipan langsung dapat
dilakukan dengan mengecek data satu persatu mulai dari yang ke dua
sampai dengan yang terakhir.
4. Metode Penyisipan Biner merupakan pengembangan dari metode
sebelumnya,idenya didasarkan pada pernyataan bahwa saat akan
menggeser data ke-i, data ke 1 sampai i–1 sebenarnya sudah dalam
keadaan urut.
5. Metode seleksi melakukan pengurutan dengan cara mencari data
yang terkecil kemudian menukarkannya dengan data yang
digunakan sebagai acuan yang disebut pivot. Proses pengurutan
dilakukan pengulangan dari 1 sampai dengan (N – 1). Tiap-tiap
pengulangan dicari data yang paling kecil diantara data ke (i+1)
sampai data terakhir (=N). Data terkecil ditukarkan dengan
pivot, yaitu data ke-i. Apabila data terkecil tersebut lebih kecil
dari data ke-i, proses penuakaran tidak perlu dilakukan.
6. Metode gelembung disebut juga metode penukaran (exchange
sort) mengurutkan data dengan cara membandingkan masing –
masing data, kemudian dilakukan penukaran jika perlu. Proses
pengurutan dilakukan dengan menggunakan dua kalang. Kalang
Urutkan data berdasarkan nilai terkecil ke nilai terbesar.
Inputan:
Nama
Umur
Proses: pengisian data akan diulang sebanyak 5 kali
Output: data diurutkan berdasarkan umur paling muda ke paling tua
Struktur Data Page 17
5. Metode seleksi melakukan pengurutan dengan cara mencari data
yang terkecil kemudian menukarkannya dengan data yang
digunakan sebagai acuan yang disebut pivot. Proses pengurutan
dilakukan pengulangan dari 1 sampai dengan (N – 1). Tiap-tiap
pengulangan dicari data yang paling kecil diantara data ke (i+1)
sampai data terakhir (=N). Data terkecil ditukarkan dengan
pivot, yaitu data ke-i. Apabila data terkecil tersebut lebih kecil
dari data ke-i, proses penuakaran tidak perlu dilakukan.
6. Metode gelembung disebut juga metode penukaran (exchange
sort) mengurutkan data dengan cara membandingkan masing –
masing data, kemudian dilakukan penukaran jika perlu. Proses
pengurutan dilakukan dengan menggunakan dua kalang. Kalang
Contoh Soal 1
Latihan
program latihsort;{$APPTYPE CONSOLE}uses SysUtils;const cgaris = '-----------------------';var snama : array[1..100] of string; iumur : array[1..100] of integer; snamatitip : string; iumurtitip : integer; i,j : integer; a,b : integer;begin { TODO -oUser -cConsole Main : Insert code here }i := 1;repeatwrite('Nama : ');readln(snama[i]);write('Umur : ');readln(iumur[i]);i := i + 1;until i > 5;a := 1;repeat b := a + 1; repeat if iumur[a] > iumur[b] then
begin snamatitip := snama[a]; snama[a] := snama[b]; snama[b] := snamatitip; iumurtitip := iumur[a]; iumur[a] := iumur[b]; iumur[b] := iumurtitip; end; b := b + 1; until b > 5; a := a + 1;until a > 4;readln;writeln('');writeln(cgaris);writeln('Nama Umur');writeln(cgaris);j := 1;repeatwrite(snama[j],' ',iumur[j]);writeln('');j := j + 1;until j > 5;writeln(cgaris);readln;end.
18
Penyelesaian Contoh Soal 1
Soal 1.
Urutkan data dibawah ini ke dalam bentuk ascending menggunakan masing-masing metode!
8 5 2 6 9 3 1 4 0 7
Soal2.
Buatlah program untuk mengurutkan data nilai mahasiswa dari terbesar ke terkecil
Nama Mahasiswa Nilai Nilai Huruf
Asep 70 B
Bonita 89 A
Cinta 54 D
Deni 60 C
Ema 90 A
Farel 60 C
Urutkan data dibawah ini ke dalam bentuk ascending menggunakan masing-masing metode!
Struktur Data Page 19
Tes Formatif
Langkah 1: membuat tabel dengan nilai indeks iterasi. Data yang menjadi acuan pertama adalah data ke- 2
Langkah 2: Data ke -2 dibandingkan dengan data ke-1, jika data ke-2 lebih kecil dibandingkan data ke-1, tukar data tersebut
Iterasi Data [1]
Data [2]
Data [3]
Data [4]
Data [5]
Data [6]
Data [7]
Data [8]
Data [9]
Data [10]
Awal 8 5 2 6 9 3 1 4 0 7
i=2 8 5 2 6 9 3 1 4 0 7
Hasil i=2 5 8 2 6 9 3 1 4 0 7 Langkah 3:
Data dibandingkan mulai data ke-3 yaitu 2, bandingkan dengan data ke-2 yaitu 8.
Apakah data ke -3 lebih kecil dari data ke-2? Jika iya nilai ditukar.
Selanjutnya, data ke-2 yaitu 2 dibandingkan dengan data ke-1 yaitu 5, jika data ke-2
lebih kecil dari data ke-1, nilai ditukar.
Struktur Data Page 20
Penyelesaian Soal 1
Penyisipan Langsung (Straight Insertion Sort)
Kunci Jawaban
Iterasi Data [1]
Data [2]
Data [3]
Data [4]
Data [5]
Data [6]
Data [7]
Data [8]
Data [9]
Data [10]
Hasil i=2 5 8 2 6 9 3 1 4 0 7
i=3 (a) 5 8 2 6 9 3 1 4 0 7
i=3 (b) 5 2 8 6 9 3 1 4 0 7
Hasil i=3 2 5 8 6 9 3 1 4 0 7Langkah 4:
Data dibandingkan mulai data ke-4 yaitu 6, bandingkan dengan data ke-3 yaitu 8. Ternyata data ke-4 lebih kecil dari data ke-3, maka nilai ditukar.
Pada data ke-3 yaitu 6, dandata ke-2 yaitu 5. Ternyata data ke -3 lebih besar dari data ke-2, maka nilai tidak ditukar.
Iterasi Data [1]
Data [2]
Data [3]
Data [4]
Data [5]
Data [6]
Data [7]
Data [8]
Data [9]
Data [10]
Hasil i=3 2 5 8 6 9 3 1 4 0 7
i=4 (a) 2 5 8 6 9 3 1 4 0 7
i=4 (b) 2 5 6 8 9 3 1 4 0 7
i=4 (c) 2 5 6 8 9 3 1 4 0 7
Hasil i=4 2 5 6 8 9 3 1 4 0 7
Ulangi langkah diatas hingga i=10
Hasilnya:
Struktur Data Page 21
Idenya didasarkan pada pernyataan bahwa saat akan menggeser data ke-i, data ke 1 sampai i–1 sebenarnya sudah dalam keadaan urut.
Contoh
Data ke-6 yaitu 3, dijadikan sebagai pembanding.
Data ke-1 hingga data ke-5, cari posisi paling tengah antara data, yaitu data ke-3.Ternyata data ke-6 yaitu 3 lebih kecil dari data ke-3 yaitu 6, maka tukar nilai tersebut.
Hasilnya adalah:
Selanjutnya, jika data pembanding lebih kecil dari data tengah, maka data disebelah
kanan diabaikan (karena sudah pasti lebih besar).
Sehingga data tengah hanya akan dibandingkan dengan data disebelah kirinya.
Cari posisi tengah pada data disebelah kiri, yaitu data ke-1. Bandingkan! Ternyata
data ke-3 lebih besar dari data ke-1 maka letakkan pada sebelah kanan data 1.
22
Penyisipan Biner (Binary Insertion Sort)
Kemudian bandingkan data tersebut disebelah kanannya. Ternyata data tersebut tidak
mengalami perubahan.
Hasilnya adalah:
Data yang menjadi pembanding adalah data ke- 1
Iterasi Data [1]
Data [2]
Data [3]
Data [4]
Data [5]
Data [6]
Data [7]
Data [8]
Data [9]
Data [10]
Awal 8 5 2 6 9 3 1 4 0 7
i=1 8 5 2 6 9 3 1 4 0 7 Data ke-1 menjadi acuan, kemudian cari data terkecil pada sebelah kanan data ke-1.
ternyata data terkecil terletak di data ke-9 yaitu 0. Tukar data ke-1 dengan data ke-9.
Hasilnya:
0 5 2 6 9 3 1 4 8 7
Hasil akhirnya:
Struktur Data Page 23
Seleksi (Selection sort)
Cara kerjanya adalah dengan berulang-ulang melakukan traversal (proses looping) terhadap elemen-elemen struktur data yang belum diurutkan.
Langkah 1: bandingkan data dari indeks yang paling belakang
Langkah 2:
24
Gelembung (Bubble Sort)
Langkah 3:
Dan seterusnya.
Prosesnya:
1. Menentukan jarak mula-mula dari data yang dibandingkan, yaitu N / 2.
2. Lakukan pengulangan dari 1 sampai N/2
3. Masing – masing pengulangan dilakukan pembandingan antara data ke-j dengan data ke-(j+N/2).
4. Apabila data-j lebih besar dari data (j + N/2 ) maka data ditukar.
5. Data diulang sampai semua data ke-j selalu lebih kecil dari data ke (j + N / 2)
Struktur Data Page 25
Metode Shell
6. Gunakan jarak (N/2)/2 atau N/4
7. Lakukan pengulangan dari 1 sampai (N-N/4) atau 3.N/4
8. Masing – masing pengulangan dilakukan pembandingan antara data ke-j dengan data ke-(j+N/4), apabila diperlukan data ditukar
9. Pengulangan dari 1 sampai 3.N/4 dilakukan sampai semua data ke-j lebih kecil dari data ke-(j+N/4)
26
Struktur Data Page 27
Mula-mula diambil L=1 dan R=10 dengan Data[(L+R)/2] dengan pivot adalah data
ke-5 yaitu 9 .
Tujuan pemilihan pivot adalah mengatur data disebelah kiri agar lebih kecil daripada
pivot dan data disebelah kanan agar lebih besar daripada pivot. 28
Metode Quick
Bandingkan 9 dengan nilai di sebelah kiri.
Ternyata, tidak ada nilai yang lebih dari 9, maka kita bandingkan nilai disebelah
kanan.
Pada proses kita mencari nilai yang paling kecil dari 9 yaitu 0. Tukar 9 dengan 0.
Setelah itu, 0 dibandingkan dengan data disebelah kiri. Cari data yang lebih besar dari
0, kemudian tukar.
Selanjutnya, buatlah dua kumpulan data baru. Kumpulan data pertama adalah indeks
1 sampai dengan 5-1=4
Kumpulan data kedua adalah data dengan indeks 1+1=2 hingga 10. kumpulan data ini
belum bisa ditentukan karena masih tergantung urutan kumpulan data pertama.
Kembali ke kumpulan data pertama. Cari pivot data tersebut dengan L=1 dan R=4
yaitu data ke 2.
Tidak ada data yang lebih besar dari 5, sedangkan ada data yang lebih kecil dari 5
yaitu 2. Tukar data.
Selanjutnya, buat kumpulan data lagi dengan indeks 1 sampai 4-1=3, yaitu:
Struktur Data Page 29
Pivotnya adalah 2.Cari apakah ada data sebelah kiri yang lebih besar dari 2? Ternyata
tidak, maka bandingkan 2 dengan disebelah kanan. Jika ada yang lebih kecil, maka
tukar.
Selanjutnya, indeks ke 2+1=3 hingga ke 4.
Data tidak perlu ditukar, karena sudah dalam keadaan urut
Kembali ke kumpulan data kedua, yaitu indeks ke 2 hingga 10.
Pivot x adalah 3. Bandingkan x dengan data ke 2 yaitu 2.
Ternyata 2 tidak lebih besar dari 3. Maka bandingkan disebelah kanan pivot. Ternyata
disebelah kanan 3 terdapat nilai yang lebih kecil. Tukarkan.
Hasilnya:
Bandingkan data 1 dengan data 2, karena lebih dikecil nilai ditukar.
Selanjutnya buat kumpulan data dibawah ini:
pivot untuk kumpulan data ini adalah 5. jika dilihat dari data tersebut data kiri dan
data kanan sudah pada posisi yang tidak bisa ditukar.
Selanjutnya, kita lakukan kembali untuk indeks 3 hingga 10
Bandingkan data x yaitu 2 dengan data ke 3 yaitu 5, karena data ke 3 lebih besar nilai
ditukar.
30
Kumpulan data yang terbentuk adalah
Dilihat dari posisi tersebut, tidak akan terjadi pertukaran data
Selanjutnya, kita lakukan kembali untuk indeks 4 hingga 10
Bandingkan data x yaitu 3 dengan data ke 4 yaitu 6, karena data ke 4 lebih besar, nilai
ditukar.
Kumpulan data yang terbentuk adalah
Dilihat dari posisi tersebut, tidak akan terjadi pertukaran data. Dan seterusnya
program Psortsoal;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
cgaris='-------------------------------------------';
var nama : array[1..100] of string;
nilai : array[1..100] of integer;
huruf : array [1..100] of string;
namatitip : string;
nilaititip : integer;
huruftitip : string;
i,j : integer;
a,b : integer;
begin
{ TODO -oUser -cConsole Main : Insert code here }
Struktur Data Page 31
Penyelesaian Soal 2
i := 1;
repeat
write('Nama : ');readln(nama[i]);
write('Nilai : ');readln(nilai[i]);
write('Huruf : ');readln(huruf[i]);
i := i + 1;
until i > 7;
a := 1;
repeat
b := a + 1;
repeat
if nilai[a] < nilai[b] then
begin
namatitip := nama[a];
nama[a] := nama[b];
nama[b] := namatitip;
nilaititip := nilai[a];
nilai[a] := nilai[b];
nilai[b] := nilaititip;
huruftitip := huruf[a];
huruf[a] := huruf[b];
huruf[b] := huruftitip;
end;
b := b + 1;
until b > 7;
a := a + 1;
until a > 6;
readln;
writeln('');
writeln(cgaris);
writeln('Nama Nilai Huruf');
writeln(cgaris);
j := 1;
repeat
write(nama[j],' ',nilai[j],' ', huruf[j]);
writeln('');
j := j + 1;
until j > 5;
writeln(cgaris);
readln;
end.
32
Setelah mempelajari bahasan pada bab Sorting diharapkan mahasiswa dapat
mendeskripsikan konsep pengurutan data, dapat menganalisis cara kerja metode
pengurutan data dan dapat membuat notasi algoritmik metode pengurutan data serta dapat
mengimplementasikan semua metode kedalam bahasa pemrograman.
Bahasan sorting sangat penting untuk digunakan sebagai dasar mempelajari materi
Searching. Dengan mempelajari sorting diharapkan dapat menganalisa proses pengurutan
serta dapat mengimplemetasikan ke dalam metode pencarian data.
Hasbi, M. (2003). Struktur Data dan Algoritma dalam Pemrograman Turbo Pascal,
Yogyakarta: Gava Media. ISBN: 979-97088-8-5
Kadir, Abdul (2011). Konsep dan Implementasi Struktur Data dalam pemrograman
Delphi, Yogyakarta: ANDI OFFSET. ISBN: 978-979-29-1786-4.
Munir, Rinaldi (2009). Algoritma dan Pemrograman dalam Bahasa PASCAL dan
C, Bandung: Informatika. ISBN: 979-756-031-0
Pranata, Antony (2005). Algoritma dan Pemrograman, Edisi Ketiga, Yogyakarta:
Graha Ilmu. ISBN: 978-979-1153-17-1
Const = konstanta atau nilai tetap
Var = variabel / tempat mendeklarasikan nama variabel yang belum dikenal program
Max = nilai maksimum
Array = tipe data larik
Pivot = nilai yang menjadi acuan
Struktur Data Page 33
Tindak Lanjut
Daftar Pustaka
Glosarium