2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

72
i LAPORAN PENELITIAN MENYIGI PENGGUNAAN METODA SHELL SORT DALAM PENGURUTAN DATA OLEH : EDHY SUTANTA JURUSAN TEKNIK INFORMATIKA FAKULTAS TEKNOLOGI INDUSTRI INSTITUT SAINS & TEKNOLOGI AKPRIND YOGYAKARTA 2004

Transcript of 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

Page 1: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

i

LAPORAN PENELITIAN

MENYIGI PENGGUNAAN METODA SHELL SORT DALAM PENGURUTAN DATA

OLEH : EDHY SUTANTA

JURUSAN TEKNIK INFORMATIKA FAKULTAS TEKNOLOGI INDUSTRI

INSTITUT SAINS & TEKNOLOGI AKPRIND YOGYAKARTA

2004

Page 2: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

ii

HALAMAN PENGESAHAN LAPORAN PENELITIAN

1. Judul Penelitian :

MENYIGI PENGGUNAAN METODA SHELL SORT

DALAM PENGURUTAN DATA

2. Bidang Ilmu : Teknik Informatika

3. Kategori Penelitian : Analisis / Kajian Teori

4. Peneliti :

a. Nama lengkap : Edhy Sutanta, S.T.

b. NIK : 96.0372.515.E

c. Pangkat / Golongan: Penata / III-C

d. Jabatan : Lektor

e. Bidang ilmu : Teknik Informatika

f. Lembaga : Jurusan Teknik Informatika, Fakultas Teknologi

Industri, Institut Sains & Teknologi AKPRIND

Yogyakarta

5. Jangka waktu penelitian : 4 (empat) bulan

6. Biaya yang diperlukan : Rp. 1.500.000,00

Yogyakarta, 30 Juni 2004

Peneliti,

Edhy Sutanta, S.T.

Mengetahui, Lembaga Penelitian Jurusan Teknik Informatika, Kepala Ketua,

Dra. Hj. Naniek Widyastuti, MT Erna Kumalasari N., ST, MT

NIP. 131 761 418

Page 3: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

iii

SURAT KETERANGAN KARYA ILMIAH

Dengan ini kami : Nama lengkap : Ir. Amir Hamzah, M.T.

NIP : 870563319E Jabatan : Lektor

Bidang ilmu : Informatika Lembaga : Jurusan Teknik Informatika

Fakultas Teknologi Industri IST AKPRIND, Yogyakarta

Memberikan rekomendasi untuk karya ilmiah dengan judul :

MENYIGI PENGGUNAAN METODE SHELL SORT

DALAM PENGURUTAN DATA

Atas nama Saudara tersebut di bawah ini : a. Nama lengkap : Edhy Sutanta, S.T. b. NIK : 96.0372.515.E

c. Pangkat / Golongan: Penata / III-C d. Jabatan : Lektor e. Bidang ilmu : Teknik Informatika

f. Lembaga : Jurusan Teknik Informatika, Fakultas Teknologi Industri, Institut Sains & Teknologi AKPRIND Yogyakarta

Isi rekomendasi karya ilmiah itu sebagai berikut :

a. Mutu : Amat Baik / Baik / Cukup / Kurang

b. Sofistifikasi : Amat Baik / Baik / Cukup / Kurang

c. Kemutakhiran : Amat Baik / Baik / Cukup / Kurang

Yogyakarta, 30 Juni 2004 Yang memberi rekomendasi Ir. Amir Hamzah, M.T.

Page 4: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

iv

SURAT KETERANGAN KARYA ILMIAH

Dengan ini kami : Nama lengkap : Dra. Hj. Naniek Widyastuti, M.T.

NIK : 131 761 418 Jabatan : Lektor

Bidang ilmu : Informatika Lembaga : Fakultas Teknologi Industri

Institut Sains & Teknologi AKPRIND Yogyakarta

Jabatan : Lektor Bidang ilmu : Informatika

Lembaga : Jurusan Teknik Informatika Fakultas Teknologi Industri Institut Sains & Teknologi AKPRIND Yogyakarta

Memberikan rekomendasi untuk karya ilmiah dengan judul : MENYIGI PENGGUNAAN METODE SHELL SORT

DALAM PENGURUTAN DATA

Atas nama Saudara tersebut di bawah ini : a. Nama lengkap : Edhy Sutanta, S.T. b. NIK : 96.0372.515.E

c. Pangkat / Golongan: Penata / III-C d. Jabatan : Lektor e. Bidang ilmu : Teknik Informatika

f. Lembaga : Jurusan Teknik Informatika, Fakultas Teknologi Industri, Institut Sains & Teknologi AKPRIND Yogyakarta

Isi rekomendasi karya ilmiah itu sebagai berikut :

a. Mutu : Amat Baik / Baik / Cukup / Kurang

b. Sofistifikasi : Amat Baik / Baik / Cukup / Kurang

c. Kemutakhiran : Amat Baik / Baik / Cukup / Kurang

Yogyakarta, 30 Juni 2004 Yang memberi rekomendasi Dra. Hj. Naniek Widyastuti, M.T. NIP. 131 761 418

Page 5: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

v

KATA PENGANTAR Puji syukur kami panjatkan ke hadirat Tuhan Yang Maha Kuasa, karena

atas rahmat dan ijin-Nya laporan penelitian ini dapat terselesaikan.

Pada kesempatan ini Penulis menyampaikan ucapkan terimakasih dan

penghargaan yang sebesar-besarnya kepada berbagai pihak yang telah

membantu kelancaran dan terlaksananya penelitian ini, yaitu :

1. Rektor Institut Sains & Teknologi AKPRIND Yogyakarta

2. Dekan Fakultas Teknologi Industri IST AKPRIND Yogyakarta

3. Kepala Lembaga Penelitian IST AKPRIND Yogyakarta

4. Bapak Ir. Amir Hamzah, M.T., atas masukan dan sarannya

5. Ibu Dra. Hj. Naniek Widyastuti, M.T., atas masukan dan sarannya

6. Rekan-rekan di Jurusan Teknik Informatika dan Laboratorium Komputer IST

AKPRIND Yogyakarta

7. Semua pihak yang telah mendukung penelitian ini

Penulis menyadari bahwa hasil penelitian ini masih mengandung

kedangkalan dan kekurangan, oleh karena itu umpan balik dan saran dari para

Pemerhati dan Pembaca akan membantu demi kesempurnaan pada masa

mendatang.

Akhirnya, Penulis berharap agar penelitian ini dapat bermanfaat.

Yogyakarta, 30 Juni 2004

Penulis

Page 6: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

vi

DAFTAR ISI

Halaman:

HALAMAN JUDUL i HALAMAN PENGESAHAN ii SURAT KETERANGAN KARYA ILMIAH iii SURAT KETERANGAN KARYA ILMIAH iv KATA PENGANTAR v DAFTAR ISI vi ABSTRAK vii BAB I. PENDAHULUAN 1 1.1. Latar Belakang Permasalahan 1 1.2. Rumusan Permasalahan 2 1.3. Tujuan Penelitian 2 1.4. Manfaat Penelitian 2 BAB II TINJAUAN PUSTAKA 3 2.1. Metode Seleksi Langsung (Straight Selection) 4 2.2. Metode Gelembung (Buble Sort) 9 2.3. Contoh Penyisipan Langsung (Straight Insertion) 13 2.4. Metode Penyisipan Biner (Binary Insertion) 17 2.5. Metode Quick Sort (Partition Exchange Sort) 22 2.6. Metode Shell Short (Diminishing Increment) 26 2.7. Metode Merge Sort (Two-way Marge Sort) 29 2.8. Metode Radix Sort 34 BAB IV METODOLOGI PENELITIAN 37 3.1. Metode Penelitian 37 3.2. Perancangan Program Aplikasi 37 3.3. Jadwal Waktu Penelitian 42 3.4. Beaya Penelitian 43 BAB IV HASIL DAN PEMBAHASAN 44 4.1. Analisis Algoritma Shell Srt Dasar 44 4.2. Desain Program Aplikasi Versi Pertama 49 4.3. Permasalahan Yang Mungkin Terjadi 54 4.4. Alternatif Solusi Perbaikan 58 4.5. Analisis Algoritma Alternatif Solusi 1 60 4.6. Analisis Algoritma Alternatif Solusi 2 61 4.7. Implementasi Program Aplikasi Versi Kedua 62 BAB IV KESIMPULAN 63 DAFTAR PUSTAKA 65

Page 7: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

vii

ABSTRAK

Pengurutan data atau sorting merupakan jenis operasi penting dalam pengolahan data yang banyak diterapkan dalam permasalahan sehari-hari. Saat ini telah dikenal beberapa metode pengurutan data, yaitu seleksi langsung (straight selection), gelembung (buble-sort atau excenge sort), penyisipan langsung (straight insertion), penyisipan biner (binary insertion), Shell sort (diminishing increment sort), quick sort (partition excenge sort), Radix sort serta merge sort (two_way merge sort). Metode penyisipan biner dikembangkan dengan menggabungkan metode penyisipan langsung dan metode pencarian biner. Dalam metode ini, metode pencarian biner digunakan untuk menentukan lokasi penyisipan data yang akan diurutkan.

Penelitian ini bertujuan untuk mengkaji kemungkinan adanya kelemahan dalam metode Shell sort dan memberikan perbaikan sehingga diperoleh jaminan bahwa hasil perbaikan tersebut akan memberikan hasil data urut. Penelitian ini dilakukan dengan studi literatur dan pengujian contoh-contoh kasus pengurutan data menggunakan simulasi program aplikasi komputer dengan Turbo Pascal. Program aplikasi dibuat dalam dua versi, yaitu versi pertama untuk prosedur asli dan versi kedua untuk hasil perbaikan. Untuk masing-masing versi, program aplikasi terdiri atas empat modul, yaitu input data sumber, proses pengurutan data ascending, pengurutan data descending, dan menampilkan informasi pengecekan hasil pengurutan

Berdasarkan hasil pengujian, algoritma prosedur Shell sort dasar yang menggunakan jarak awal N div 2 sebagai jarak awal untuk perbandingan ternyata masih memungkinkan menimbulkan kesalahan hasil operasi. Kesalahan hasil operasi pengurutan data tersebut terjadi utamanya akibat penetapan jarak perbandingan yang digunakan pada langkah pertama kali yang berpengaruh terhadap jarak yang digunakan pada langkah selanjutnya. Dalam algoritma prosedur yang banyak digunakan jarak yang digunakan pertama kali adalah N div 2.

Perbaikan dapat dilakukan pada algoritma Shell sort dalam dua macam solusi. Solusi 1, jarak perbandingan adalah dimulai pada nilai ((N div 2)+1) bukan (N div 2) , pada langkah selanjutnya (N div 2), ((N div 2)-1), ((N div 2)-2) dan seterusnya. Dalam alternatif solusi 2, jarak perbandingan untuk langkah pertama adalah dimulai pada nilai (N-1) bukan (N div 2), pada langkah selanjutnya (N-2), (N-3), dan seterusnya. Secara relatif, solusi 1 lebih efisien dibandingkan solusi 2, namun kurang aman jika dibandingkan solusi 2. Sebaliknya, solusi 2 sangat tidak efisien, namun relatif jauh lebih aman dibandingkan solusi 1. Untuk pengurutan secara descending, perbaikannya dapat dilakukan dengan cara yang sama dengan solusi 1 dan 2, tetapi penukaran akan dilakukan jika nilai data pada urutan lebih awal kurang dari nilai data pada urutan yang lebih akhir. Kata kunci: pengurutan data, algoritma, Shell sort, jarak

Page 8: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

1

BAB I PENDAHULUAN

1.1. Latar Belakang Permasalahan

Pengurutan data atau sorting merupakan salah satu jenis operasi penting

dalam pengolahan data. Hampir setiap saat dalam kehidupan sehari-hari kita

selalu menjumpai permasalahan-permasalahan yang harus diselesaikan dengan

melibatkan operasi pengurutan data. Begitu pentingnya operasi tersebut,

sehingga sampai saat ini telah banyak dikembangkan metoda-metoda

pengurutan data. Pada dasarnya terdapat dua macam data urut, yaitu urut naik

(ascending) dan urut turun (descending).

Contoh sekumpulan data dalam kondisi urut naik dan urut turun, adalah

sebagai berikut :

Ascending : 40 47 51 52 69 70 72 84 90

Descending : 90 84 72 70 69 52 51 47 40

Saat ini telah dikenal beberapa metoda pengurutan data, antara lain

seleksi langsung (straight selection), gelembung (buble-sort atau excenge sort),

penyisipan langsung (straight insertion), Shell sort (binary insertion), shell sort

(diminishing increment sort), quick sort (partition excenge sort), radix sort serta

merge sort (two_way merge sort).

Metoda Shell sort (diminishing increment) pertama kali dikenalkan pada

tahun 1959 oleh Donald L.Shell. Sebagai sebuah konsep yang dikembangkan

oleh manusia, maka metode Shell sort perlu dikaji dan diteliti lebih jauh untuk

mengetahui kemungkinan adanya kelemahan-kelemahan dalam penggunaan

metode tersebut. Dengan ditemukannua kelemahan tersebut, diharapkan akan

dapat diperoleh solusi perbaikannya.

Page 9: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

2

1.2. Rumusan Permasalahan

Berdasarkan latar belakang permasalahan di atas, maka permasalahan

yang akan dibahas dalam penelitian ini adalah menemukan kelemahan metode

Shell Sort dan bagaimana melakukan perbaikan terhadap algoritma prosedur

dalam metode tersebut. Penelitian ini dibatasi pada:

1. Penerapan metode Shell Sort dengan data sumber berupa sekumpulan

data numerik

2. Mengkaji kemungkinan adanya kelemahan dalam metode Shell Sort

3. Modifikasi untuk perbaikan metode Shell Sort

1.3. Tujuan Penelitian

Penelitian ini bertujuan untuk mengkaji kemungkinan adanya kelemahan

dalam metode Shell Sort dan memberikan perbaikan terhadap metode tersebut

sehingga diperoleh jaminan bahwa penggunaan metode yang sudah diperbaiki

tersebut akan memberikan hasil berupa data urut.

1.4. Manfaat Penelitian

Hasil penelitian ini diharapkan memberikan masukan bagi pemrogram

dalam menerapkan metode Shell Sort agar terhindar dari kesalahan hasil

operasi.

Page 10: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

3

BAB II TINJAUAN PUSTAKA

Pengurutan data (sorting) merupakan salah satu jenis operasi penting

dalam pengolahan data. Banyak permasalahan dalam kehidupan sehari-hari

yang harus diselesaikan dengan melibatkan operasi pengurutan data. Begitu

pentingnya operasi tersebut, sehingga telah dikembangkan metode-metode

pengurutan data dan mungkin akan muncul lagi metode yang baru. Beberapa

metode pengurutan data yang telah dikenal dan sering digunakan adalah seleksi

langsung (straight selection), gelembung (buble-sort atau exchange sort),

penyisipan langsung (straight insertion), penyisipan biner (binary insertion),

Shellsort (diminishing increment sort), quick sort (partition exchange sort), Radix

sort serta merge sort (two_way merge sort).

Pada dasarnya terdapat dua macam kondisi data urut, yaitu urut naik

(ascending) dan urut turun (descending). Data urut ascending jika data urutan

lebih awal mempunyai harga lebih kecil dari pada data urutan berikutnya.

Sebaliknya, data urut descending jika data pada urutan lebih awal mempunyai

harga lebih besar dari data urutan berikutnya.

Masing-masing metode tentu saja mempunyai keunggulan dan

kelemahan yang dapat saling dibandingkan. Umumnya dalam cacah data yang

sedikit, penggunaan metode seleksi langsung atau penyisipan langsung akan

lebih efisien dan menguntungkan. Namun dalam cacah data yang besar kedua

metode tersebut tidak efisien lagi untuk diterapkan. Efisiensi metode yang

digunakan dalam sebuah aplikasi adalah ditentukan oleh kecepatan dalam

mengurutkan data-data yang dalam kenyataannya sangat ditentukan oleh

banyaknya langkah yang harus dilakukan untuk membandingkan harga setiap

Page 11: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

4

data dan menentukan lokasi urutan data. Semakin sedikit waktu yang diperlukan

untuk memperoleh data urut berarti metode tersebut relatif lebih baik.

2.1. Metode Seleksi Langsung (Straight Selection)

Prosedur pengurutan data ascending dengan metode seleksi langsung

adalah dimulai dengan mencari data terkecil dari seluruh data dan kemudian

ditempatkan pada posisi urutan pertama. Langkah kedua adalah mencari data

terkecil kedua dari seluruh data kecuali data pertama, dan kemudian ditempatkan

pada posisi urutan kedua. Langkah ketiga adalah mencari data terkecil ketiga

dari seluruh data kecuali data pertama dan kedua, dan kemudian ditempatkan

pada posisi urutan ketiga. Langkah seperti ini akan dilakukan secara terus

menerus hingga semua data selesai diproses dan telah menempati posisi yang

tepat dan akhirnya akan menghasilkan sekumpulan data yang urut.

Proses yang terjadi pada langkah pertama dilakukan dengan cara

mengambil data pertama dan kemudian dibandingkan dengan data kedua. Bila

data pertama lebih besar dari data kedua, maka tukarkan data pertama dengan

data kedua. Jika data kedua lebih besar dari data pertama, maka proses

dilanjutkan untuk membandingkan data pertama dengan data ketiga. Jika data

pertama lebih besar, maka tukarkan data pertama dengan data ketiga. Teruskan

proses tersebut hingga data pertama selesai dibandingkan dengan seluruh data

yang ada, sehingga akhirnya akan diperoleh data terkecil. Hasilnya kemudian

ditempatkan pada urutan pertama. Pada langkah selanjutnya data pertama tidak

perlu dibandingkan lagi.

Pada langkah kedua, data kedua dibandingkan dengan data ketiga. Bila

data kedua lebih besar dari data ketiga, maka tukarkan data kedua dengan data

Page 12: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

5

ketiga. Jika data ketiga lebih besar, maka proses dilanjutkan untuk

membandingkan data kedua dengan data keempat. Jika data kedua lebih besar,

maka tukarkan data kedua dengan data keempat. Teruskan proses tersebut

hingga data kedua selesai dibandingkan dengan seluruh data yang ada,

sehingga akhirnya akan diperoleh data terkecil. Hasilnya kemudian ditempatkan

pada urutan kedua, dan pada langkah selanjutnya data kedua tidak perlu

dibandingkan lagi. Langkah-langkah selanjutnya dilakukan dengan cara

mengulangi proses tersebut untuk menemukan data terkecil ketiga, keempat,

kelima, dan seterusnya hingga semua data akan menempati lokasi yang tepat.

Jika diinginkan data urut descending, maka proses perbandingannya

tinggal dibalik. Pada langkah pertama data pertama dibandingkan dengan data

kedua, bila data pertama lebih kecil dari data kedua, maka tukarkan data

pertama dengan data kedua. Jika data kedua lebih kecil dari harga data pertama,

maka proses dilanjutkan untuk membandingkan data pertama dengan data

ketiga. Jika data pertama lebih kecil, maka tukarkan data pertama dengan data

ketiga. Teruskan proses tersebut hingga data pertama selesai dibandingkan

dengan seluruh data yang ada, sehingga akhirnya akan diperoleh data terbesar.

Hasilnya kemudian ditempatkan pada urutan pertama, dan pada langkah

selanjutnya data pertama tidak perlu dibandingkan lagi.

Pada langkah kedua, data kedua dibandingkan dengan data ketiga. Bila

data kedua lebih kecil dari pada data ketiga, maka tukarkan data kedua dengan

data ketiga. Jika data ketiga lebih kecil dari data kedua, maka proses dilanjutkan

untuk membandingkan data kedua dengan data keempat. Jika data kedua lebih

kecil, maka tukarkan data kedua dengan data keempat. Teruskan proses

tersebut hingga data kedua selesai dibandingkan dengan seluruh data, sehingga

Page 13: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

6

akhirnya akan diperoleh data terbesar. Hasilnya kemudian ditempatkan pada

urutan kedua, dan pada langkah selanjutnya data kedua tidak perlu diproses lagi.

Proses pada langkah-langkah selanjutnya adalah mengulangi proses

tersebut untuk menemukan data terbesar ketiga, keempat, kelima, dan

seterusnya hingga semua data akan menempati lokasi yang tepat dan pada

akhirnya akan diperoleh data dalam kondisi urut descending.

Berikut adalah contoh penggunaan metode seleksi langsung untuk

mengurutkan data-data secara ascending dan descending. Data-data yang akan

diurutkan adalah sebagai berikut:

12 29 17 56 11 23

Langkah-langkah yang dilakukan dalam proses pengurutan secara

ascending adalah ditunjukkan oleh Tabel 2.1. Sedangkan Tabel 2.2 menunjukan

proses pengurutan data secara descending. Dalam kedua tabel tersebut, data

yang bergaris bawah merupakan data terkecil yang harus ditemukan dan

diproses pada langkah berikutnya.

Tabel 2.1: Contoh pengurutan data ascending dengan metode seleksi langsung Iterasi ke Data yang

diproses Hasil proses

0

1

2

3

4

5

-

11

17

23

29

59

12 29 17 56 11 23 11 12 29 17 56 23 11 12 17 29 56 23 11 12 17 23 29 59 11 12 17 23 29 59 11 12 17 23 29 59

Page 14: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

7

Tabel 2.2: Contoh pengurutan data descending dengan metode seleksi langsung Iterasi ke Data yang

diproses Hasil proses

0

1

2

3

4

5

-

56

29

23

17

12

12 29 17 56 11 23 56 11 12 29 17 23 56 29 11 12 17 23 56 29 23 11 12 17 56 29 23 17 11 12 56 29 23 17 12 11

Dalam metode seleksi langsung harus diperhatikan seluruh elemen

data sumber untuk kemudian menentukan sebuah elemen data yang akan

ditempatkan pada tujuan (multiple source one destination). Solusi dalam bentuk

algoritma untuk mengurutkan data secara ascending dengan metode seleksi

langsung dapat dituliskan sebagai berikut:

Masukan vektor K yang memuat N buah data yang akan diurutkan.

Data-data yang akan diurutkan dibaca sebagai X.

1. Mulai

2. Proses berulang langkah-3 s/d langkah-5

FOR I = 1 TO N-1

3. Tentukan harga awal

LOKASI = I

4. Proses berulang untuk membandingkan harga data-data

FOR J = I +1 TO N

IF (X[LOKASI] > X[J]

Jika ya, tentukan LOKASI = J

Jika tidak, lanjutkan ke langkah-6

5. Tentukan posisi data X[I] dengan X[LOKASI]

BANTU = X[I]

X[I] = X[LOKASI]

Page 15: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

8

X[LOKASI] = BANTU

6. Cetak hasil

7. Selesai

Solusi dalam bentuk algoritma untuk mengurutkan data secara urut

turun dengan metode seleksi langsung dapat dituliskan sebagai berikut:

Masukkan vektor K yang memuat N buah data yang akan diurutkan.

Data-data yang akan diurutkan dibaca sebagai X.

1. Mulai

2. Proses berulang langkah-3 s/d langkah-5

FOR I = 1 TO N-1

3. Tentukan harga awal

LOKASI = I

4. Proses berulang untuk membandingkan harga data-data

FOR J = I +1 TO N

IF (X[LOKASI] < X[J]

Jika ya, tentukan LOKASI = J

Jika tidak, lanjutkan ke langkah-6

5. Tentukan posisi data X[I] dengan X[LOKASI]

BANTU = X[I]

X[I] = X[LOKASI]

X[LOKASI] = BANTU

6. Cetak hasil

7. Selesai

Dalam algoritma prosedur pengurutan data dengan metode seleksi

langsung tersebut digunakan beberapa variabel, yaitu I, N, J, X, LOKASI, dan

BANTU. Variabel I dan J digunakan sebagai pencacah. Variabel N menunjukkan

cacah data yang akan diurutkan. Variabel X digunakan untuk menyimpan harga-

harga data yang akan diurutkan. Sedangkan variabel LOKASI dan BANTU

digunakan sebagai variabel bantuan untuk proses pertukaran lokasi data-data.

Page 16: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

9

Dalam metode seleksi langsung, banyaknya proses perbandingan antar

data yang harus dilakukan untuk menemukan harga terkecil atau data terbesar

pada setiap langkah adalah sebanyak N-1. Untuk mengurutkan seluruh data

dalam vektor asal/sumber, maka total proses perbandingan yang harus dilakukan

dapat dihitung dengan formula sebagai berikut:

22)1()( 21

1

NNNNINK

N

I

−=

−=

−=∑

=

Keterangan:

K : cacah total proses perbandingan

N : cacah data

I : langkah pengurutan

Dalam cacah data yang besar, penggunaan metode ini akan tidak

efisien, karena memerlukan langkah perbandingan yang sangat banyak sehingga

akan memerlukan waktu yang relatif lama.

2.2. Metode Gelembung (Buble Sort)

Metode gelembung (bublesort) disebut juga metode exchange sort. Jika

dibandingkan dengan metode seleksi langsung, metode gelembung memiliki

perbedaan dalam menemukan data terkecil dan cara pertukaran datanya.

Langkah pertama pengurutan data secara ascending dengan metode

gelembung adalah membandingkan data pertama dengan data kedua, jika data

pertama lebih besar maka tukarkan posisinya dengan data kedua. Kemudian

data kedua dibandingkan dengan data ketiga, tukarkan jika data kedua lebih

besar dari data ketiga. Selanjutnya, data ketiga dibandingkan dengan data

keempat, tukarkan jika data ketiga lebih besar dari data keempat. Proses seperti

ini akan diulang terus menerus hingga semua data selesai dibandingkan. Hasil

Page 17: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

10

pada langkah pertama adalah menempatkan data terbesar pada urutan. Data

terbesar yang telah menempati posisi terakhir tersebut tidak perlu dibandingkan

lagi pada langkah selanjutnya.

Pada langkah kedua, data pertama dibandingkan dengan data kedua.

Jika harga data pertama lebih besar maka tukarkan dengan data kedua.

Kemudian data kedua dibandingkan dengan data ketiga, tukarkan posisinya jika

data kedua lebih besar dari data ketiga. Selanjutnya, data ketiga dibandingkan

dengan data keempat, tukarkan jika data ketiga lebih besar dari data keempat.

Proses tersebut diulang secara terus menerus hingga semua data selesai

dibandingkan. Hasil pada langkah kedua adalah menempatkan data terbesar

pada urutan terakhir. Sehingga data terbesar yang diperoleh tersebut akan

menempati urutan kedua dari belakang dari keseluruhan data hasil pengurutan.

Data kedua tersebut tidak perlu dibandingkan lagi pada langkah selanjutnya.

Jika K menyatakan cacah proses perbandingan yang harus dilakukan

untuk mengurutkan semua data, maka cacah perbandingan dalam metode

gelembung dapat dihitung dengan formula sebagai berikut:

2

2 NNK −=

Keterangan:

K : cacah proses perbandingan

N : cacah data

Sebagai contoh, terdapat enam elemen data yang akan diurutkan

ascending dengan metode gelembung, yaitu sebagai berikut:

87 74 71 54 88 60

Proses pengurutan ascending dengan metode gelembung dapat ditelusuri

pada Tabel 2.3. Dalam tabel tersebut, data yang bergaris bawah merupakan

Page 18: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

11

data terbesar yang harus ditemukan dan diurutkan pada langkah berikutnya.

Data tersebut akan menempati posisi terakhir sebelum elemen-elemen data yang

telah diurutkan pada langkah sebelumnya.

Tabel 2.3: Contoh pengurutan data ascending dengan metode gelembung Iterasi ke Data yang

diproses Hasil proses

0

1

2

3

4

5

-

88

87

74

71

60

87 74 71 54 88 60 74 71 54 87 60 88 71 54 74 60 87 88 54 71 74 60 87 88 54 60 71 74 87 88 54 60 71 74 87 88

Solusi dalam bentuk algoritma untuk mengurutkan data secara

ascending dengan metode gelembung dapat dituliskan sebagai berikut:

Masukkan vektor K yang memuat N buah data yang akan diurutkan.

Data-data yang akan diurutkan dibaca sebagai X.

1. Mulai

2. Proses berulang langkah-3

FOR I = 1 TO N-1

3. Proses berulang langkah-4

FOR J = 1 TO N-I

4. Proses berulang untuk membandingkan harga data-data

IF X[J] > X[J+1]

Jika ya, lakukan penggeseran

BANTU = X[J]

X[J] = X[J+1]

X[J+1] = BANTU

Page 19: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

12

5. Cetak hasil

6. Selesai

Jika data dalam contoh di atas akan diurutkan secara descending,

maka langkah proses pengurutan di atas tinggal dibalik, yaitu pada saat

membandingkan harga data, sehingga data terkecil akan dicari dari keseluruhan

data sumber dan ditempatkan pada posisi terakhir.

Secara ringkas, langkah pengurutan secara descending dengan metode

gelembung dapat ditelusuri pada Tabel 2.4. Dalam tabel tersebut, data yang

bergaris bawah merupakan data terkecil yang harus ditemukan dan diurutkan

pada langkah berikutnya dan akan menempati posisi paling akhir sebelum

elemen-elemen data yang telah diurutkan pada langkah sebelumnya.

Tabel 2.4: Contoh pengurutan data descending dengan metode gelembung Iterasi ke Data yang

diproses Hasil proses

0

1

2

3

4

5

-

54

60

71

74

87

87 74 71 54 88 60 74 71 71 88 60 54 87 74 71 88 60 54 87 74 88 71 60 54 87 88 74 71 60 54 88 87 74 71 60 54

Solusi dalam bentuk algoritma untuk mengurutkan data secara

descending dengan metode gelembung dapat dituliskan sebagi berikut ini:

Masukkan vektor K yang memuat N buah data yang akan diurutkan.

Data-data yang akan diurutkan dibaca sebagai X.

1. Mulai

Page 20: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

13

2. Proses berulang langkah-3

FOR I = 1 TO N-1

3. Proses berulang langkah-4

FOR J = 1 TO N-I

4. Proses berulang untuk membandingkan harga data-data

IF X[J] < X[J+1]

Jika ya, lakukan penggeseran

BANTU = X[J]

X[J] = X[J+1]

X[J+1] = BANTU

5. Cetak hasil

6. Selesai

2.3. Metode Penyisipan Langsung (Straight Insertion)

Secara umum proses pengurutan data dengan metode penyisipan

langsung (straight insertion) merupakan kebalikan dari proses yang dilakukan

dalam metode seleksi langsung. Dalam metode penyisipan langsung, hanya

diperhatikan satu elemen data dari sumber dan semua elemen data dari larik

tujuan (one source multiple destination).

Pengurutan data dengan metode penyisipan langsung dimulai dengan

membandingkan data kedua dengan data pertama. Jika data kedua lebih besar,

maka data kedua ditukarkan posisinya dengan data pertama. Pada langkah

berikutnya data ketiga dibandingkan dengan data kedua. Jika data ketiga lebih

besar, maka data ketiga ditukarkan posisinya dengan data kedua. Kemudian

data tersebut dibandingkan dengan data pertama, tukarkan posisinya jika data

ketiga lebih besar. Berikutnya data keempat dibandingkan dengan semua data

urut yang telah diproses, yaitu ketiga, kedua, dan pertama. Proses perbandingan

Page 21: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

14

data yang sedang diproses terhadap data urut akan dihentikan jika data tersebut

telah menempati posisi semestinya sehingga akan tetap diperoleh data urut.

Sebagai contoh, diketahui larik data yang memuat delapan data dalam

tidak urut, yaitu sebagai berikut:

10 5 7 9 2 1 8 6

Langkah pengurutan dan hasil pada setiap langkah pengurutan dengan

metode penyisipan langsung dapat ditelusuri pada Tabel 2.5. Dalam tabel

tersebut, data yang bergaris bawah merupakan data urutan berikutnya yang

harus dibandingkan dan disisipkan dalam larik yang telah diurutkan pada langkah

sebelumnya. Setiap data baru yang diproses akan selalu disisipkan secara

langsung dan menempati posisi baru yang tepat, sehingga pada setiap akhir

langkah tertentu semua data yang telah diproses akan selalu berada dalam

kondisi urut.

Tabel 2.5: Contoh pengurutan ascending dengan metode penyisipan langsung Iterasi ke Data yang

diproses Hasil Proses

0

1

2

3

4

5

6

7

-

5

7

9

2

1

8

6

10 5 7 9 2 1 8 6 5 10 7 9 2 1 8 6 5 7 10 9 2 1 8 6 5 7 9 10 2 1 8 6 2 5 7 9 10 1 8 6 1 2 5 7 9 10 8 6 1 2 5 7 8 9 10 6 1 2 7 6 7 8 9 10

Page 22: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

15

Algoritma prosedur pengurutan data ascending dengan metode penyisipan

langsung dapat dituliskan sebagai berikut:

Masukkan vektor K yang memuat N buah data yang akan diurutkan.

Data-data yang akan diurutkan dibaca sebagai X.

1. Mulai

2. Proses berulang langkah-3 s/d langkah-4

FOR I = 1 TO N

3. Tentukan elemen yang akan disisipkan

T = X[I]

X[0] = T

J = I - 1

4. Proses berulang untuk menyisipkan harga data-data

WHILE T<X[J]

Jika ya, lakukan penggeseran

X[J+1] = X[J]

J = J -1

X[J+1] = T

5. Cetak hasil

6. Selesai

Jika data dalam contoh di atas akan diurutkan secara descending,

maka prosesnya tinggal dibalik saja. Prosedur pengurutan data descending

dengan metode penyisipan langsung, adalah dimulai dengan membandingkan

data kedua dengan data pertama. Jika data kedua lebih besar, maka data kedua

ditukarkan posisinya dengan data pertama. Proses pada langkah berikutnya data

ketiga dibandingkan dengan data kedua. Jika data ketiga lebih kecil, maka data

ketiga ditukarkan posisinya dengan data kedua. Kemudian data tersebut

dibandingkan dengan data pertama, tukarkan posisi kedua data jika data ketiga

lebih kecil.

Page 23: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

16

Berikutnya data keempat dibandingkan dengan data-data urut yang

telah diproses, yaitu ketiga, kedua, dan pertama. Proses perbandingan data baru

yang sedang diproses dengan data-data lain yang telah urut akan dihentikan jika

data tersebut telah menempati posisi yang semestinya sehingga data-data yang

telah diproses tetap berada dalam kondisi urut.

Langkah dan hasil pengurutan data pada setiap langkah dapat ditelusuri

sebagaimana ditunjukkan oleh Tabel 2.6. Dalam tabel tersebut, data yang

bergaris bawah merupakan data urutan berikutnya yang harus dibandingkan dan

disisipkan dalam larik yang telah diurutkan pada langkah sebelumnya.

Tabel 2.6: Contoh pengurutan descending dengan metode penyisipan langsung Iterasi ke Data yang

diproses Hasil Proses

0

1

2

3

4

5

6

7

-

5

7

9

2

1

8

6

10 5 7 9 2 1 8 6 10 5 7 9 2 1 8 6 10 7 5 9 2 1 8 6 10 9 7 5 2 1 8 6 10 9 7 5 2 1 8 6 10 9 7 5 2 1 8 6 10 9 8 7 5 2 1 6 10 9 8 7 6 5 2 1

Algoritma prosedur pengurutan data descending dengan metode

penyisipan langsung dapat dituliskan sebagai berikut ini:

Masukkan vektor K sebanyak N buah data yang akan diurutkan.

Data-data yang akan diurutkan dibaca sebagai X.

1. Mulai

Page 24: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

17

2. Proses berulang langkah-3 s/d langkah-4

FOR I = 1 TO N

3. Tentukan elemen yang akan disisipkan

T = X[I]

X[0] = T

J = I-1

4. Proses berulang untuk menyisipkan harga data-data

While T>X[J]

Jika ya, lakukan penggeseran

X[J+1] = X[J]

J = J -1

X[J+1] = T

5. Cetak hasil

6. Selesai

2.4. Metode Penyisipan Biner (Binary Insertion)

Metode penyisipan biner (binary insertion) merupakan usaha perbaikan

dari metode penyisipan langsung (straight inserton). Dalam cacah data yang

banyak, proses pengurutan data dengan metode penyisipan biner akan lebih

efisien jika dibandingkan dengan metode penyisipan langsung. Secara garis

besar, proses pengurutan data dengan metode ini terdiri dari dua bagian utama,

yaitu proses penentuan elemen-elemen data yang akan diproses dan proses

penyisipan elemen data untuk mengurutkan data-data. Proses penentuan

elemen data yang akan diproses adalah sama dengan cara-cara dalam metode

penyisipan langsung. Berbeda dengan metode penyisipan langsung dimana

penentuan lokasi dan penyisipan dilakukan secara langsung, maka dalam

metode penyisipan biner penentuan lokasi dan penyisipan dilakukan dengan

metode biner. Oleh karena itu, metode ini kemudian disebut sebagai metode

penyisipan biner.

Page 25: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

18

Langkah pengurutan data menggunakan metode penyisipan biner dapat

dijelaskan sebagai berikut ini. Mula-mula data pertama dalam larik sumbr

dianggap telah menempati posisi yang tepat pada larik hasil. Kemudian setiap

data yang mendapat giliran diproses akan disisipkan ke dalam larik hasil, yaitu

dimulai data kedua, ketiga, hingga data terakhir. Proses penyisipannya dilakukan

dengan tiga tahap, yaitu penentuan lokasi untuk penyisipan, kemudian

penggeseran data-data dalam larik hasil yang mempunyai harga lebih besar dari

data yang akan disisipkan, dan terakhir adalah penyisipan data.

Untuk menentukan lokasi penyisipan dengan cara biner dilakukan

dengan cara sebagai berikut ini. Mula-mula ditetapkan harga-harga batas bawah

dan batas atas interval untuk larik hasil. Harga awal batas bawah untuk setiap

iterasi adalah 1. Sedangkan harga awal batas atas pada setiap iterasi adalah

sama dengan cacah data pada larik hasil. Sebagai contoh, jika saat ini sedang

berlangsung proses penyisipan data ke-10 dari larik sumber, maka harga awal

batas bawahnya adalah 1 dan batas atasnya adalah 9. Selanjutnya dari dua

harga awal tersebut dapat ditentukan titik tengah intervalnya, yaitu dengan

menjumlahkan harga batas interval bawah dengan batas interval atas dan

kemudian dibagi 2. Titik ini akan membagi larik hasil menjadi dua bagian yang

sama.

Jika data-data akan diurutkan secara urut naik, maka data-data pada

bagian pertama yaitu bagian yang berda di sebelah kiri akan memuat data-data

urut yang lebih kecil dari harga data pada titik tengah interval. Sedangkan data-

data pada bagian kedua yaitu bagian yang berada di sebelah kanan akan

memuat data-data yang lebih besar dari harga data pada titik tengah interval.

Setiap data yang akan disisipkan mula-mula dibandingkan dengan data pda

Page 26: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

19

posisi titik tengah interval. Jika semua data dalam larik sumber tidak ada yang

sama, maka langkah ini akan mengakibatkan dua kemungkinan kondisi, yaitu

data yang akan disisipkan akan lebih kecil atau lebih besar dari harga data pada

posisi titik tengah interval. Jika lebih kecil maka, penyisipan harus dilakukan pada

bagian pertama yaitu interval sebelah kiri. Selanjutnya tidak perlu dibandingkan

dengan data-data pada bagian kedua di sebalah kanan. Namun jika data yang

akan disisipkan lebih besar, maka penyisipan harus dilakukan pada bagian

kedua dan tidak perlu lagi dibandingka dengan bagian pertama. Dengan cara

demikian, maka dapat dikurangi langkah proses membandingkan antara data

yang akan disisipkan dengan data-data dalam larik hasil. Faktor inilah yang

mampu meningkatkan efisiensi proses pengurutan data dengan metode

penyisipan biner sehingga dalam cacah data yang cukup banyak akan lebih baik

jika dibandingkan dengan metode penyisipan langsung.

Untuk melanjutkan ke langkah berikutnya, perlu diperhatikan bahwa jika

data yang disisipkan akan menempati pada bagian pertama, maka batas atas

interval akan digeser menjadi titik tengah dikurangi satu. Sebaliknya jika data

yang disisipkan akan menempati bagian kedua, maka batas bawah interval

dinaikan menjadi titik tengah ditambah satu. Prosedur demikian adalah mengikuti

cara-cara dalam metode biner yang merupakan salah satu dasar bagi

dikembangkannya metode penyisipan biner.

Pada langkah selanjutnya, interval dimana data akan disisipkan dibagi

kembali menjadi dua bagian yang sama dengan menetapkan titik tangah pada

interval baru yang lebih sempit tersebut. Kemudian proses perbandingan dan

penentuan interval-interval baru dilakukan kembali. Demikian seterusnya proses

dilaksanakan hingga ditemukan posisi yang tepat bagi data yang akan disisipkan,

Page 27: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

20

yaitu jika harga titik tengah interval telah sama dengan harga batas bawah dan

batas atas interval. Selanjutnya jika posisi penyisipan telah ditemukan, maka

proses dilanjutkan untuk menggeser data-data mulai dari posisi dimana data

akan disisipkan hingga data terakhir pada larik hasil. Setelah selesai baru

kemudian dilakukan penyisipan, yaitu dengan cara menempatkan data yang

disisipkan pada posisi yang telah ditemukan. Dengan demikian sebuah data telah

selesai diproses dan data-data dalam larik hasil tetap berada dalam kondisi urut.

Untuk menyisipkan elemen-elemen data lain yang belum terproses, adalah

dilakukan dengan cara yang sama dengan cara-cara tersebut di atas. Pada

akhirnya jika semua data telah selesai diproses, akan diperoleh sebuah vektor

yang urut secara naik.

Untuk memproses yang dilakukan dalam metode penyisipan biner,

berikut ini akan diberikan sebuah contoh penerapannya. Diketahui sebuah vektor

K yang mempunyai delapan elemen data, yaitu sebagai berikut:

10 5 7 9 2 1

Dengan menggunakan metode penyisipan biner, vektor tersebut akan diurutkan

secara ascending. Secara ringkas, langkah dan hasil proses pengurutan pada

setiap iterasi adalah ditunjukkan oleh Tabel 2.7. Data yang mempunyai tanda

garis bawah menunjukkan bahwa data tersebut akan disisipkan pada iterasi

berikutnya. Seperti terlihat dalam tabel tersebut untuk mendapatkan vektor yang

urut naik diperlukan 7 iterasi penyisipan data. Sebagai contoh, hasil proses pada

iterasi pertama akan menyisipkan data 5 dalam posisi pertama. Iterasi kedua

akan menempatkan data 7 pada urutan kedua. Selanjutnya hasill iterasi ketiga

akan menempatkan data 9 pada urutan ketiga. Demikian seterusnya proses

Page 28: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

21

tersebut akan diulangi hingga akhirnya semua data dalam vektor K menjadi urut

secara naik.

Algoritma prosedur pengurutan data secara ascending dengan metode

penyisipan biner sebagaimana telah dijelaskan di atas, dapat dituliskan ke dalam

solusi bentuk algoritma prosedur seperti di bawah ini.

Masukan vektor K yang memuat N buah data yang akan diurutkan.

Data-data yang akan diurutkan dibaca sebagai X.

1. Mulai

2. Proses berulang langkah-3 s/d langkah-9

FOR I = 2 TO N

3. Tentukan elemen yang akan disisipkan dan harga awal batas-batas interval

SISIP = X[I], BAWAH = 1, ATAS = I-1

4. Proses berulang langkah-5 s/d langkah-6 untuk mencari lokasi penyisipan

data

WHILE BAWAH <= ATAS

5. Tentukan titik tengah interval

TENGAH = (BAWAH+ATAS) DIV 2

6. Mencari lokasi penyisipan

IF SISIP < X[TENGAH]

Jika ya, tentukan batas interval atas baru: ATAS=TENGAH-1

Jika tidak, tentukan batas interval bawah baru: BAWAH=TENGAH+1

7. Proses berulang langkah-8

FOR J = I -1 DOWNTO BAWAH

8. Menggeser data-data

X[J+1] = X[J]

9. Sisipkan data

X[BAWAH] = T

10. Selesai

Page 29: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

22

Tabel 2.7: Contoh pengurutan ascending dengan metode penyisipan biner Iterasi Ke: Hasil Proses

0

1

2

3

4

5

10 5 7 9 2 1 5 10 7 9 2 1 5 7 10 9 2 1 5 7 9 10 2 1 2 5 7 9 10 1 1 2 5 7 9 10

2.5. Metode Quick Sort (Partition Exchange Sort)

Metode Quick Sort (Partition Exchange Sort) pertama kali diperkenalkan

oleh C.A.R. Hoare. Proses pengurutan data menggunakan metode ini secara

garis besar adalah sebagai berikut ini. Apabila diketahui sebuah vektor K dengan

N buah elemen data yang akan diurutkan secara urut naik. Pertama-tama dipilih

salah satu elemen data sembarang pada vektor K tersebut, biasanya adalah

elemen pada urutan pertama dan diberi nama X. Selanjutnya semua elemen

pada vektor K disusun dengan menempatkan elemen data X pada posisi tertentu

yaitu J sedemikian rupa sehingga elemen data pada urutan ke-1 sampai ke J-1

mempunyai harga lebih besar dari X. Sehingga, dengan demikian akan terdapat

dua subvektor, yaitu subvektor bagian pertama yang memuat elemen-elemen

data yang memilki harga kurang dari X dan subvektor bagian kedua yang

memuat elemen-elemen data yang memilki harga lebih dari X.

Prosedur di atas akan diulang pada subvektor pertama dan subvektor

kedua, sehingga akan diperoleh empat bagian subvektor baru. Proses yang

sama akan terus dilakukan secara berulang hingga semua subvektor pada

Page 30: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

23

akhirnya hanya tinggal mempunyai satu elemen data. Dalam kondisi demikian,

maka semua data dalam vektor K telah menjadi urut naik.

Secara lebih terinci, prosedur pengurutan data dengan menggunakan

metode quick sort dapat terdiri serangkaian langkah yang dapat dituliskan dalam

solusi bentuk algoritma sebagai berikut ini.

Masukan vektor K yang memuat N buah data yang akan diurutkan.

Data-data yang akan diurutkan dibaca sebagai X.

1. Mulai

2. Cek pencacah data

IF AWAL < AKHIR

Jika ya, kerjakan langkah-3 s/d langkah-10

Jika tidak, kerjakan langkah-11

3. Tentukan harga awal

I = AWAL +1

J = AKHIR

4. Menentukan posisi data X dengan gerakan dari kiri ke kanan

WHILE X[I] < X[AWAL]

I = I+1

5. Menentukan posisi data X dengan gerakan dari kanan ke kiri

WHILE X[J] > X[AWAL]

J = J-1

6. Proses berulang langkah-7 s/d langkah-9

while i<j

7. Tukarkan nilai X[I] dengan X[J]

BANTU = X[J]

X[J] =X[I]

X[I] = BANTU

8. Bergerak dari kiri ke kanan

WHILE X[I] < X[AWAL]

I = I+1

9. Bergerak dari kanan ke kiri

Page 31: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

24

WHILE X[J] > X[AWAL]

J = J -1

10. Tukarkan X[AWAL] dengan X[J]

BANTU = X[J]

X[J] = X[AWAL]

X[AWAL] = BANTU

11. Cetak hasil

12. Selesai

Sebagai ilustrasi pengurutan data secara urut naik dengan metode

quick sort, berikut ini akan diberikan contoh penerapannya. Diketahui suatu

vektor K yang mempunyai delapan elemen data, yaitu sebagai berikut:

87 74 71 100 75 25 56 90

Proses pengurutan data dalam vektor K di atas dimulai dengan

menempatkan data urutan pertama yaitu 87 pada posisi tertentu yaitu J,

sehingga titik J akan membagi vektor K menjadi dua subvektor baru yaitu

subvektor di sebelah kiri yang hanya memuat data-data yang lebih kecil atau

sama dengan 87. Subvektor kedua yaitu subvektor di sebelah kanan hanya

memuat data-data yang mempunyai harga lebih besar dari 87. Dengan demikian,

data 87 akan ditempatkan pada urutan ke-2. Hasil dari proses pada langkah

pertama tersebut di atas selengkapnya adalah sebagai berikut:

74 71 75 25 56 87 100 90

Langkah berikutnya, elemen pertama pada subvektor kiri yaitu 74

dibandingkan dengan elemen data pada urutan kedua, ketiga, keempat, serta

kelima pada subvektor kiri. Dengan demikian 74 akan menempati urutan ke-4

dan akan membagi subvektor kiri menjadi dua subvektor baru, dimana subvektor

pertama akan berada di sebelah kiri yang hanya akan memuat data-data yang

Page 32: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

25

lebih kecil atau sama dengan 74 dan subvektor kedua akan berada disebelah

kanan yang hanya akan memuat data-data yang lebih besar dari 74.

Pada saat yang bersamaan data-data pada subvektor kanan juga

dikenakan perlakuan yang sama. Data pertama pada subvektor kanan yaitu 100

akan dibandingkan dengan semua data dalam subvektor kanan, sehingga akan

membentuk dua subvektor baru. Berhubung cacah elemen pada subvektor

kanan hanya memiliki dua elemen data, maka subvektor baru yang terbentuk

akan menempatkan elemen 90 pada urutan lebih awal dan elemen 100 pada

urutan berikutnya. Akhir proses pada langkah ini akan memberikan hasil sebagai

berikut:

71 25 56 74 75 87 90 100

Langkah selanjutnya, elemen pertama pada subvektor kiri yaitu 71 akan

dibandingkan dengan elemen data 25 dan 56 pada subvektor bagian kiri.

Akhirnya subvektor kiri akan terbagi menjadi dua subvektor baru, dimana data 71

akan menempati urutan ke-3. Sedangkan masing - masing subvektor kanan

tinggal memiliki sebuah elemen data, sehingga tidak perlu diproses kembali.

Akhir proses pada langkah ini akan memberikan hasil sebagai berikut:

25 56 71 74 75 87 90 100

Dengan mengulang proses yang sama seperti diatas, maka pada

akhirnya akan diperoleh suatu vektor baru dalam kondisi urut secara naik, yaitu

sebagai berikut ini:

25 56 71 74 75 87 90 100

Page 33: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

26

2.2.Metode Shell Short (Diminishing Increment)

Metode Shellsort (diminishing increment) pertama kali dikenalkan pada

tahun 1959 oleh Donald L.Shell. Proses pengurutan data dengan metode ini

secara ringkas dapat dijelaskan sebagai berikut ini. Untuk mengurutkan sebuah

vektor yang memuat N elemen data secara ascending, mula-mula data pertama

dibandingkan dengan data pada jarak tertentu dari data pertama tersebut, misal

N/6 atau N-5, N-4, N-3, N-2, atau N-1. Jika data pertama lebih besar, maka posisi

data saling ditukarkan. Berikutnya, data kedua dibandingkan dengan data pada

jarak yang sama sebagaimana dilakukan pada data pertama. Lakukan

pertukaran data jika diperlukan. Demikian seterusnya proses perbandingan dan

pertukaran data dilakukan pada seluruh data (data ke-N).

Pada langkah kedua, proses perbandingan dan pertukaran data seperti

di atas diulang kembali dengan jarak yang lebih kecil. Demikian juga untuk

langkah ketiga, keempat, kelima, hingga terakhir, proses perbandingan dan

pertukaran, (jika diperlukan) akan terus dilakukan dengan jarak yang semakin

diperkecil. Proses akan dihentikan hingga jarak perbandingan antar data sama

dengan satu. Dalam kondisi demikian ini, maka semua data dalam vektor N telah

menjadi urut naik.

Dalam metode Shellsort tidak ada ketentuan tentang seberapa jauh

jarak yang harus ditetapkan untuk perbandingan antar data pertama kali yang

kemudian akan dipersempit pada langkah-langkah selanjutnya. Semakin jauh

jarak perbandingan yang digunakan pertama kali akan mengakibatkan semakin

banyak proses perbandingan dan pertukaran antar data yang harus dilakukan.

Hal ini berarti proses pengurutan data akan menjadi tidak efisien. Jika

diharapkan efisiensi yang tinggi tentu akan digunakan jarak yang relatif kecil

Page 34: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

27

sejak langkah pertama. Tetapi, cara yang seperti ini sungguh tidak dapat

menjamin keakuratan pada hasil operasi. Dengan menetapkan jarak

perbandingan sama dengan separuh dari cacah data keseluruhan (=N/2) untuk

langkah pertama, kemudian N/2-1, N/2-2, N/2-3, dan seterusnya pada langkah-

langkah berikutnya, pada umumnya akan memberikan efisiensi yang cukup baik.

Metode ini akan paling aman digunakan jika jarak yang digunakan pada langkah

pertama adalah N-1, kemudian N-2 pada langkah kedua, N-3 pada langkah

ketiga, dan seterusnya hingga proses berakhir. Namun, cara ini sama sekali tidak

efisien.

Berikut contoh pengurutan data ascending dengan metode Shellsort,

untuk sebuah vektor K yang memiliki delapan elemen data dalam kondisi acak

yaitu sebagai berikut:

90 15 95 30 35 100 12 25

Tabel 2.8. Contoh pengurutan data iascending dengan metode Shellsort Iterasi ke Jarak Hasil proses

0

1

2

3

4

5

6

7

-

7

6

5

4

3

2

1

90 15 95 30 35 100 12 25 25 15 95 30 35 100 12 90 12 15 95 30 35 100 25 90 12 15 90 30 35 100 25 95 12 15 25 30 35 100 90 95 12 15 25 30 35 95 90 100 12 15 25 30 35 95 90 100 12 15 25 30 35 95 90 100

Jika jarak untuk melakukan perbandingan pada langkah pertama adalah

N-1 atau sama dengan 7, maka jarak perbandingan pada langkah kedua adalah

Page 35: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

28

6, jarak pada langkah ketiga adalah 5, dan pada langkah-langkah berikutnya

akan terus dikurangi satu hingga akhirnya sama dengan satu. Secara terinci,

proses pengurutan data dengan metode Shellsort untuk vektor K adalah seperti

ditunjukan dalam Tabel 2.8. Tanda garis bawah adalah menunjukan posisi awal

data yang akan saling dibandingkan pada langkah selanjutnya.

Algoritma prosedur pengurutan data secara urut naik dengan metode

Shellsort dapat dituliskan seperti di bawah ini.

Masukan vektor K yang memuat N buah data yang akan diurutkan.

Data-data yang akan diurutkan dibaca sebagai X.

1. Mulai

2. Tentukan harga awal jarak perbandingan data.

JARAK = N/2

3. Proses berulang langkah-4 s/d langkah-7

while jarak >= 1

4. Proses berulang langkah-5 s/d langkah-6 untuk mengurutkan data

FOR I = 1 TO N-JARAK

5. Tentukan

J = I + JARAK

6. Bandingkan antar data

IF X[I] > X[J]

Jika ya, tukarkan posisi kedua data

BANTU = X[I]

X[I] = X[J]

X[J] = BANTU

7. Tentukan jarak baru untuk langkah berikutnya

JARAK = JARAK-1

8. Cetak hasil

9. Selesai

Page 36: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

29

2.7. Metode Merge Sort (Two-way Marge Sort)

Metode merge sort juga disebut two way merge sort. Langkah-langkah

pengurutan dengan merge sort secara garis besar dapat dijelaskan sebagai

berikut ini. Andaikan terdapat sebuah vektor K dengan cacah elemen data

sebanyak N dalam kondisi tidak urut. Untuk mengurutkan semua data dalam K,

mula-mula setiap elemen dalam vektor K dianggap sebagai sebuah vektor yang

masing-masing mempunyai sebuah elemen data. Dengan demikian akan

terdapat N vektor dengan cacah elemen masing-masing adalah 1 buah.

Selanjutnya setiap pasang vektor yang berurutan digabungkan menjadi sebuah

vektor baru. Jika diinginkan hasil secara urut naik, maka pada saat

menggabungkan kedua vektor tersebut sekaligus dilakukan perbandingan dan

pertukaran posisi antar elemen data sedemikian rupa sehingga data yang lebih

kecil akan ditempatkan pada posisi yang mendahului data lain yang lebih besar.

Pada akhir langkah pertama ini, akan diperoleh vektor baru sebanyak N/2 yang

masing-masing dalam kondisi urut naik. Cacah elemen pada masing-masing

vektor adalah 2 buah, kecuali jika N bernilai ganjil maka akan terdapat N/2+1

vektor baru dimana salah satu vektor hanya memiliki sebuah elemen data saja.

Langkah selanjutnya, setiap pasang vektor yang berurutan digabungkan

sekaligus saling ditukarkan posisi antar data sehingga akan terbentuk vektor-

vektor baru. Proses penggabungan dan pertukaran posisi data tersebut akan

dilakukan terus-menerus hingga akhirnya diperoleh vektor baru yang memuat

semua elemen data dalam vektor sumber dalam kondisi urut.

Berikut contoh proses pengurutan ascending dengan metode merge sort

untuk sebuah vektor K dengan delapan elemen data sebagai berikut:

87 74 71 100 75 25 56 90

Page 37: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

30

Ilustrasi proses pengurutan vektor K dengan metode merge sort secara

ringkas adalah ditunjukkan Gambar 2.10.

Gambar 2.10: Contoh ilustrasi pengurutan data dengan metode merge sort

Dalam contoh di atas, mula-mula vektor K akan dipecah menjadi vektor-

vektor baru yang masing-masing memiliki satu elemen data, sehingga akan

terdapat delapan vektor. Pada langkah pertama, setiap pasang vektor yang

berurutan akan digabungkan dan sekaligus dibandingkan untuk menempatkan

data yang lebih kecil pada lokasi yang lebih awal. Dalam contoh di atas 87 akan

digabungkan dengan 74, 71 dengan 100, 75 dengan 25, dan 56 dengan 90.

Dengan demikian langkah pertama akan menghasilkan empat vektor baru yang

masing-masing telah urut. Langkah ketiga akan menggabungkan kembali

sekaligus mengatur lokasi setiap data yang digabungkan tersebut sehingga

akhirnya akan menghasilkan dua vektor baru. Pada langkah terakhir, yaitu

langkah keempat, maka dua vektor hasil penggabungan pada langkah ketiga

akan digabungkan dan diatur kembali, sehingga akhirnya akan diperoleh vektor

baru yang urut secara naik, yaitu:

25 56 71 74 75 87 90 100

Dari ilustrasi di atas terlihat bahwa untuk mengurutkan vektor KK yang

memiliki delapan elemen data akan memerlukan 3 langkah penggabungan

Langkah-1: 87 74 71 100 75 25 56 90 N = 1 Langkah-2: 74 80 71 100 25 75 56 90 N = 2 Langkah-3: 71 74 80 100 25 56 75 90 N = 3 Langkah-4: 25 56 71 74 75 80 90 100 N = 4

Page 38: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

31

dimana masing-masing langkah terdiri dari beberapa proses perbandingan dan

pertukaran lokasi elemen data.

Selanjutnya, untuk menuliskan solusi bentuk algoritma prosedur

pengurutan data secara urut naik dengan metode merge sort akan digunakan

beberapa variabel I, J, K, dan L, adalah sebagai pencacah pada proses

perulangan. Variabel N adalah menunjukkan cacah elemen vektor sumber KK.

Variabel ITERASI menyatakan banyaknya langkah yang harus dilakukan untuk

mengurutkan data. SUB ITERASI adalah variabel untuk menentukan banyaknya

sub iterasi pada setiap iterasi. Variabel UKURAN menunjukkan cacah elemen

vektor pada iterasi yang bersesuaian. Sedangkan R, S dan T adalah variabel-

variabel yang akan digunakan sebagai pencacah. Untuk memperoleh vektor

yang urut maka cacah iterasi yang harus dilakukan adalah sebanyak M dimana

sama dengan log2N. Algoritma prosedur pengurutan data dengan metode merge

sort dapat dituliskan sebagai berikut ini:

Masukan vektor K yang memuat N buah data yang akan diurutkan.

KK adalah vektor hasil dalam kondisi urut naik.

1. Mulai

2. Proses berulang langkah-3 s/d langkah-8

FOR ITERASI = 1 TO M

3. Inisialisasikan untuk iterasi

UKURAN = 2..(ITERASI-1)

P = 1

Q = P + UKURAN

SUB ITERASI = N/(2x ITERASI)

4. Proses berulang langkah-5 s/d langkah-8 untuk setiap iterasi

FOR S = 1 TO SUB ITERASI

5. Inisialisasi prosedur simple merge

I = P

Page 39: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

32

J = Q

T = P

6. Proses berulang untuk membandingkan antar data dan menemukan elemen

terkecil

WHILE ((I+1-P <= UKURAN) AND (J+1-Q <= UKURAN))

IF ITETRASI = “GANJIL”

Jika ya, IF K[I] <= K[J]

Jika ya, tentukan KK[T] = K[I]

I = I + 1

T = T + 1

Jika tidak, tentukan KK[T] = K[J]

J = J + 1

T = T + 1

Jika tidak, IF KK[I] <= KK[J]

Jika ya, tentukan K[T] = KK[I]

I = I + 1

T = T + 1

Jika tidak, tentukan K[T] = KK[J]

J = J + 1

T = T + 1

7. Copikan sisa elemen data yang tidak terproses dari vektor sumber ke vektor

hasil

IF I + 1 – P > UKURAN

Jika ya, IF ITERASI = “Ganjil”

Jika ya, lakukan proses berulang

FOR R = J TO Q + UKURAN-1

KK[T] = K[R]

T = T + 1

Jika tidak, lakukan proses berulang

FOR R = J TO Q + UKURAN – 1

K[T] = KK[R]

T = T + 1

Jika tidak, IF ITERASI = “Ganjil”

Jika ya, lakukan proses berulang

Page 40: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

33

FOR R = I TO P + UKURAN – 1

KK[I] = K[R]

T = T +1

Jika tidak, lakukan proses berulang

FOR R = I TO P + UKURAN – 1

K[T] = KK[R]

T = T + 1

8. Perbaharui indikasi vektor

P = Q + UKURAN

Q = P + UKURAN

9. Copikan ulang jika diperlukan

IF M = “Ganjil”

Jika ya, lakukan proses berulang

FOR I = 1 TO N

K[I] = KK[I]

10. Cetak hasil

11. Selesai

Proses dalam algoritma di atas dapat dijelaskan sebagai berikut ini.

Langkah ke-1 adalah titik mulai proses dimana data yang akan diurutkan

diasumsikan telah dibaca sebelumnya. Langkah ke-2 memeriksa cacah iterasi

yang diperlukan dalam pengurutan data. Langkah ke-3 memeriksa cacah

masing-masing vektor baru (=UKURAN) yang digunakan dalam sub iterasi untuk

melakukan proses penggabungan. Langkah ini juga menghitung cacah prosedur

penggabungan (=SUB ITERASI) yang diperlukan dalam satu kali iterasi. Selain

itu, inisialisasi variabel K dan L dilakukan untuk menyimpan jejak vektor yang

digabungkan pada setiap sub iterasi ditetapkan dalam langkah ini. Langkah ke-4

adalah memeriksa cacah sub iterasi yang diperlukan pada setiap iterasi. Langkah

ke-5 adalah menginisialisasikan variabel-variabel I, J, dan T yang akan

Page 41: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

34

digunakan sebagai indeks vektor yang akan digabungkan. Langkah ke-6 hingga

langkah ke-8 merupakan prosedur untuk melakukan penggabungan. Dalam

langkah ini, jika variabel ITERASI mempunyai nilai ganjil maka outputnya akan

disimpan dalam vektor C. Namun jika bernilai genap, maka outputnya akan

disimpan dalam vektor KK yaitu vektor hasil. Langkah ke-9 adalah menentukan

daerah vektor yang telah terurut / tersortir. Jika cacah ITERASI yang diperlukan

dalam menyortir vektor adalah ganjil, maka outputnya akan meliputi semua

elemen data yang telah terproses. Dalam kasus ini, maka elemen-elemen data

dalam vektor C akan dicopikan ke dalam vektor KK.

Metode ini cukup efisien untuk diterapkan. Untuk cacah iterasi

sebanyak M = Log2N, maka total perbandingan yang harus dilakukan adalah

sebanyak NxLog2N kali. Kelemahan metode ini adalah daerah output akan

memerlukan tempat yang sama ukuranya dengan vektor sumber. Algoritma

prosedur merge sort sebagaimana dituliskan di atas hanya diutamakan pada

vektor dengan cacah elemen N=2M. Tentunya algoritma prosedur tersebut dapat

dimodifikasi agar dapat mengatasi semua kasus pengurutan data secara umum.

2.8. Metode Radix Sort

Metode pengurutan dengan Radix Sort hanya ditujukan untuk

pengurutan data yang bertipe numerik saja. Dalam metode Radix Sort proses

pengurutan didasarkan pada harga sesungguhnya dari suatu digit pada bilangan-

bilangan yang hendak diurutkan. Dalam basis sistem bilangan desimal, maka

digit-digit suatu bilangan dapat dikelompokkan menjadi 10 kelompok, yaitu

kelompok “0”, “1”, “2”, “3”, “4”, “5”, “6”, “7”, “8”, dan “9”. Dengan demikian harga

suatu bilangan dapat diidentifikasi ke dalam kelompok-kelompok digit tersebut.

Page 42: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

35

Sebagai contoh pada bilangan 5426 angka 6 menempati pada digit “satuan”,

angka 2 menempati pada digit “puluhan”, angka 4 menempati pada digit

“ratusan”, dan angka 5 menempati pada digit “ribuan”. Untuk mengurutkan data-

data bertipe numerik, maka dapat dilakukan dengan cara membandingkan setiap

digit yang bersesuaian terhadap bilangan yang lain.

Pengurutan data dengan metode Radix Sort dilakukan dengan cara

membandingkan setiap digit bilangan yang akan diurutkan mulai dari digit paling

kiri yaitu digit yang mempunyai harga paling besar. Jika harganya sama maka

kemudian perlu dibandingkan kembali digit pada posisi di sebelah kanannya

hingga digit yang terakhir yaitu digit yang ditulis paling kanan. Pada saat dijumpai

adanya perbedaan nilai pada digit yang sama, maka dapat ditentukan bahwa

suatu bilangan adalah lebih besar atau lebih kecil berdasarkn harganya. Sebagai

contoh, data 6425 adalah lebih besar dari 5425, karena harga pada digit pertama

(dari kiri), yaitu 6 lebih besar dari 5.

Dalam contoh yang lain, 7254 adalah lebih kecil dari 7264. Jika

dibandingkan, digit 7 pada kedua bilangan tersebut mempunyai harga yang

sama, sehingga harus dibandingkan harga pada digit sebelah kanannya. Digit

kedua pada 7254, nilainya sama dengan digit kedua pada 7264, yaitu sama-

sama memiliki angka 2. Ini berarti harus dibandingkan kembali digit sebelah

kanannya. Ketika dibandingkan kembali, yaitu 5 pada 7254 dan digit 6 pada

angka 7264, maka digit 6 lebih besar daripada 5. Sehingga dapat disimpulkan

bahwa 7254 lebih kecil daripada 7264.

Dalam metode Radix sort, setiap data yang akan diurutkan perlu

dipisahkan ke dalam sejumlah digit sesuai kelompok-kelompoknya.

Pengelompokan dimulai pada digit paling kiri yaitu digit terbesar dan kemudian

Page 43: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

36

diikuti oleh digit berikutnya yang lebih kecil hingga pada digit satuan yang

menempati posisi paling kanan. Untuk keperluan pengelompokan tersebut, jika

diperlukan dapat ditambahkan digit 0 untuk menyamakan panjang digit semua

data yang akan diurutkan.

Page 44: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

37

BAB III METODOLOGI PENELITIAN

3.1. Metode Penelitian

Penelitian ini dilakukan dengan studi literatur dan pengujian contoh-contoh

kasus pengurutan data menggunakan simulasi program aplikasi komputer.

Langkah-langkah yang dilakukan dalam penelitian ini adalah:

1. Memahami prosedur pengurutan data dengan metode Shell sort dari

berbagai literatur dan referensi

2. Mengembangkan program aplikasi komputer sesuai dengan prosedur

dalam metode Shell sort

3. Menguji program aplikasi untuk beberapa kasus pengurutan data yang

berbeda

4. Menganalisis kemungkinan terjadinya kesalahan hasil operasi

pengurutan data

5. Mengembangkan alternatif solusi untuk perbaikan prosedur dalam

metode Shell sort

6. Menguji program aplikasi hasil perbaikan untuk beberapa kasus

pengurutan data yang berbeda

7. Menyusun dokumentasi laporan penelitian

3.2. Perancangan Program Aplikasi

Untuk mempermudah analisis dalam penelitian ini, maka perlu

dikembangkan alat bantu berupa program aplikasi komputer yang dikembangkan

dengan bahasa pemrograman Turbo Pascal. Program aplikasi dibuat dalam dua

versi, yaitu versi pertama untuk prosedur asli dan versi kedua untuk hasil

Page 45: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

38

perbaikan. Untuk masing-masing versi, program aplikasi terdiri atas empat

bagian/modul, yaitu:

1. Bagian/modul untuk input data sumber

2. Bagian/modul untuk proses pengurutan data secara ascending

3. Bagian/modul untuk proses pengurutan data secara descending

4. Bagian/modul untuk menampilkan informasi pengecekan hasil pengurutan

Struktur program aplikasi komputer yang dikembangkan adalah ditunjukkan oleh

Gambar 3.1.

Gambar 3.1: Rancangan struktur program aplikasi

Tampilan dialog layar utama program aplikasi yang dikembangkan

dirancang sebagaimana ditunjukkan oleh Gambar 3.2.

Gambar 3.2: Rancangan dialog layar tampilan utama

PENGURUTAN DATA DENGAN METODE SHELL SORT

INPUT DATA

PROSES PENGURUTAN DESCENDING

PROSES PENGURUTAN ASCENDING

CEK HASIL PENGURUTAN

PENGURUTAN DATA DENGAN METODE SHELL SORT

1. INPUT DATA 2. PENGURUTAN SECARA ASCENDING 3. PENGURUTAN SECARA DESCENDING 4. CEK HASIL PENGURUTAN 5. SELESAI MASUKAN PILIHAN ANDA [1..5] :

Page 46: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

39

Fungsi masing-masing bagian/modul program aplikasi yang dirancang

adalah sebagai berikut:

1. INPUT DATA

Bagian/modul ini berfungsi sebagai tempat pemasukan data sumber yang

akan diurutkan. Bagian/modul ini merupakan tampilan dialog layar yang

dirancang sebagaimana ditunjukkan oleh Gambar 3.3.

Gambar 3.3: Rancangan dialog layar input data

2. PROSES PENGURUTAN ASCENDING

Bagian/modul ini berfungsi sebagai tempat pemrosesan pengurutan data

secara ascending. Bagian/modul ini merupakan tampilan dialog layar yang

dirancang sebagaimana ditunjukkan oleh Gambar 3.4.

Gambar 3.4: Rancangan dialog layar proses ascending

INPUT DATA

MASUKAN CACAH DATA SUMBER: 999 MASUKAN NILAI DATA KE-1 : 999 MASUKAN NILAI DATA KE-2 : 999 . . : . . : MASUKAN NILAI DATA KE-N : 999 TEKAN ENTER UNTUK KEMBALI KE MENU UTAMA

PENGURUTAN ASCENDING

CACAH DATA SUMBER : 999 DATA SUMBER : 999 999 999 999 999 999 999 999 999 999 HASIL PENGURUTAN : 999 999 999 999 999 999 999 999 999 999 TEKAN ENTER UNTUK KEMBALI KE MENU UTAMA

Page 47: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

40

3. PROSES PENGURUTAN DESCENDING

Bagian/modul ini berfungsi sebagai tempat pemrosesan pengurutan data

secara descending. Bagian/modul ini merupakan tampilan dialog layar yang

dirancang sebagaimana ditunjukkan oleh Gambar 3.5.

Gambar 3.5: Rancangan dialog layar proses descending

4. CEK HASIL PENGURUTAN

Bagian/modul ini berfungsi sebagai tempat menampilkan informasi

pengecekan hasil pengurutan data. Bagian ini mempunyai dua kemungkinan,

yaitu hasil proses pengurutan ascending atau descending sesuai pilihan.

Bagian/modul ini merupakan tampilan dialog layar yang dirancang

sebagaimana ditunjukkan oleh Gambar 3.6, Gambar 3.7, Gambar 3.8 dan

Gambar 3.9.

Gambar 3.6: Rancangan dialog layar hasil pengecekan proses ascending

PENGURUTAN DESCENDING

CACAH DATA SUMBER : 999 DATA SUMBER : 999 999 999 999 999 999 999 999 999 999 HASIL PENGURUTAN : 999 999 999 999 999 999 999 999 999 999 TEKAN ENTER UNTUK KEMBALI KE MENU UTAMA

CEK HASIL PENGURUTAN ASCENDING

HASIL PENGURUTAN SUDAH BENAR …! TEKAN ENTER UNTUK KEMBALI KE MENU UTAMA

Page 48: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

41

Gambar 3.7: Rancangan dialog layar hasil pengecekan proses ascending

Gambar 3.8: Rancangan dialog layar hasil pengecekan proses descending

Gambar 3.9: Rancangan dialog layar hasil pengecekan proses descending

Program aplikasi dirancang hanya untuk mengolah input berupa bilangn

bulat dengan cacah data maksimal 100 buah. Hal ini dilakukan dengan alasan

program aplikasi hanya dimaksudkan sebagai alat bantu untuk menganalisis

validitas algoritma prosedur, bukan untukpengolahan data yang kompleks.

Statemen utama yang digunakan dalam program aplikasi antara lain adalah:

CEK HASIL PENGURUTAN ASCENDING

HASIL PENGURUTAN TIDAK BENAR …! KESALAHAN PADA NILAI : 999 URUTAN : 999 TEKAN ENTER UNTUK KEMBALI KE MENU UTAMA

CEK HASIL PENGURUTAN DESCENDING

HASIL PENGURUTAN SUDAH BENAR …! TEKAN ENTER UNTUK KEMBALI KE MENU UTAMA

CEK HASIL PENGURUTAN DESCENDING

HASIL PENGURUTAN TIDAK BENAR …! KESALAHAN PADA NILAI : 999 URUTAN : 999 TEKAN ENTER UNTUK KEMBALI KE MENU UTAMA

Page 49: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

42

1. Statemen input : berfungsi untuk memasukkan data sumber, yaitu

menggunakan statemen READ dan READLN

2. Statemen output : berfungsi untuk menampilkan data hasil proses

pengurutan data, yaitu menggunakan statemen WRITE dan WRITELN.

3. Statamen GOTOXY : berfungsi untuk untuk pengaturan tampilan input

dan output dalam dialog tampilan layar

4. Statemen FOR TO DO: berfungsi sebagai satemen kendali proses

perulangan selama pemasukan, pemrosesan mapun penampilan hasil

5. Statemen IF THEN : berfungsi sebagai statemen kendali pada saat

pembandingan nilai-nilai data

6. Statemen WHILE DO : berfungsi sebagai statemen kendali pada saat

penentuan lokasi penyisipan secara biner

Berdasarkan informasi yang diperoleh dari pengecekan hasil proses

pengurutan untuk beberapa data sumber yang berbeda, selanjutnya dapat

dianalisis permasalahan yang masih mungkin muncul dalam metode Shell sort.

Hasil analisis tersebut, selanjutnya dapat digunakan sebagai dasar untuk

melakukan perbaikan metode Shell sort. Program aplikasi versi pertama,

selanjutya dimodifikasi menjadi versi kedua berdasarkan hasil analisis yang

diperoleh tersebut.

3.3. Jadwal Waktu Penelitian

Penelitian ini dilaksanakan dalam jangka waktu 4 (empat) bulan, dengan

rincian kegiatan sebagaimana ditunjukkan oleh Tabel 3.1.

Page 50: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

43

Tabel 3.1: Kegiatan dan alokasi waktu penelitian Tahap Kegiatan Waktu

Persiapan awal Mengumpulkan materi 4 Minggu

Pelaksanaan Menganalisis teori

Menguji data

Menyusun program

3 Minggu

3 Minggu

2 Minggu

Penyelesaian Menyusun laporan 4 Minggu

3.4. Beaya Penelitian

Rincian kebutuhan beaya penelitian ini ditunjukkan oleh Tabel 3.2.

Tabel 3.2: Kegiatan dan alokasi waktu penelitian No Komponen beaya Jumlah (Rupiah)

1. Tenaga Peneliti 300.000 2. Pustaka dan fotocopy bahan pustaka 600.000 3. Alat tulis, kertas, cartridge 300.000 4. Pengetikan 100.000 5. Akses internet 100.000 6. Fotocopy dan penjilidan laporan 100.000

TOTAL : 1.500.000

Page 51: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

44

BAB IV HASIL DAN PEMBAHASAN

4.1. Analisis Algoritma Metode Shell Sort Dasar

Proses pengurutan data dengan metode ini secara ringkas dapat

dijelaskan sebagai berikut ini. Untuk mengurutkan sebuah vektor yang memuat N

elemen data secara ascending, mula-mula data pertama dibandingkan dengan

data pada jarak tertentu dari data pertama tersebut. Jarak yang digunakan pada

langkah pertama umumnya adalah N/2, artinya data pertama (=X[1]) akan

dibandingkan dengan data pada urutan ke-N/2 (=X[N/2]). Jika X[1]>X[N/2], maka

posisi data saling ditukarkan. Berikutnya, X[2] dibandingkan dengan data pada

jarak yang sama sebagaimana dilakukan pada data pertama, yaitu X[N/2+1].

Lakukan pertukaran data jika X[2]<X[N/2+1]. Demikian seterusnya proses

perbandingan dan pertukaran data dilakukan pada seluruh data (hingga X[N]).

Pada langkah kedua, proses perbandingan dan pertukaran data seperti

di atas diulang kembali dengan jarak yang lebih kecil, yaitu N/2-1. Untuk langkah

ketiga perbandingan dilakukan dengan jarak N/2-2. Demikian seterusnya, proses

perbandingan dan pertukaran dilakukan dengan menggunakan jarak yang

semakin diperkecil. Proses akan dihentikan hingga jarak perbandingan antar data

sama dengan satu (Jarak=1). Dalam kondisi demikian ini, maka semua data

dalam vektor N telah selsai diproses.

Dalam metode Shell sort tidak ada ketentuan tentang seberapa jauh

jarak yang harus ditetapkan untuk perbandingan antar data pertama kali yang

kemudian akan dipersempit pada langkah-langkah selanjutnya. Semakin jauh

jarak perbandingan yang digunakan pertama kali akan mengakibatkan semakin

banyak proses perbandingan dan pertukaran antar data yang harus dilakukan.

Page 52: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

45

Hal ini berarti proses pengurutan data akan menjadi tidak efisien. Jika

diharapkan efisiensi yang tinggi tentu akan digunakan jarak yang relatif kecil

sejak langkah pertama. Tetapi, cara yang seperti ini sungguh tidak dapat

menjamin keakuratan pada hasil operasi. Dengan menetapkan jarak

perbandingan sama dengan separuh dari cacah data keseluruhan (=N/2) untuk

langkah pertama, kemudian N/2-1, N/2-2, N/2-3, dan seterusnya pada langkah-

langkah berikutnya, pada umumnya akan memberikan efisiensi yang cukup baik.

Algoritma prosedur pengurutan data secara urut naik dengan metode

Shell sort dapat dituliskan seperti di bawah ini.

Masukan vektor K yang memuat N buah data yang akan diurutkan. Data-data yang akan diurutkan dibaca sebagai X. 1. Mulai 2. Tentukan harga awal jarak perbandingan data.

JARAK = N div 2 3. Proses berulang langkah-4 s/d langkah-7

while jarak >= 1 4. Proses berulang langkah-5 s/d langkah-6 untuk mengurutkan data

FOR I = 1 TO N-JARAK 5. Tentukan

J = I + JARAK 6. Bandingkan antar data

IF X[I] > X[J] Jika ya, tukarkan posisi kedua data BANTU = X[I] X[I] = X[J] X[J] = BANTU

7. Tentukan jarak baru untuk langkah berikutnya JARAK = JARAK-1

8. Cetak hasil 9. Selesai

Berdasarkan hasil penelitian empiris yang pernah dilakukan, algoritma Shell

sort mempunyai efisiensi waktu yang tinggi untuk cacah data (=N) hingga

berukuran sedang, yaitu sampai dengan 100.000 data. Efisiensi waktu proses

tersebut ditampilkan oleh Gambar 4.1 (http://linux.wku.edu/).

Page 53: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

46

Gambar 4.1: Efisiensi waktu proses pengurutan (http://linux.wku.edu/)

Sebagai perbandingan, berikut ditampilkan empat prosedur pengurutan

dengan metode Shell sort hasil penelitian yang diperoleh dari sumber di Internet.

1. Algoritma dasar Shell sort (http://linux.wku.edu/) void shellSort(int numbers[], int array_size) { int i, j, increment, temp; increment = 3; while (increment > 0) { for (i=0; i < array_size; i++) { j = i; temp = numbers[i]; while ((j>=increment)&&(numbers[j-increment]>temp)) { numbers[j] = numbers[j - increment]; j = j - increment; } numbers[j] = temp; } if (increment/2 != 0) increment = increment/2; else if (increment == 1) increment = 0; else

Page 54: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

47

increment = 1; }

}

2. Algoritma prosedur Shell sort (Miller, 1993) PROCEDURE { shell } Sort (VAR A: Ary; N: Integer); {Shell-Metzner Sort } {Adapted from Programming in Pascal, P. Grogono, Addison-Wesley, 1980 } {From Borland Pascal Programs for Scientists and Engineers } { by Alan R. Miller, Copyright C 1993, SYBEX Inc } VAR Done: Boolean; Jump, I, J: Integer; BEGIN Jump := N; WHILE Jump > 1 DO BEGIN Jump := Jump DIV 2; REPEAT Done := True; FOR J := 1 TO N - Jump DO BEGIN I := J + Jump; IF A[J] > A[I] THEN BEGIN Swap(A[J], A[I]); Done := False END { if } END { FOR } UNTIL Done END { WHILE } END; { Sort }

3. Algoritma prosedur Shell sort (Baudel, 1998) class ShellSort extends AlgoTri { ShellSort (int t, VueTris v) { super("Shell sort", t, v); }

void insertionsort (int offset, int n, int incr) { for (int i = incr; i < n; i+= incr) for (int j = i; (j >= incr) && compare(j+offset, j+offset-incr)< 0; j-=incr) exchange(j+offset, j+offset-incr); } public void sort () { // here, we use the simplest increment suite. for (int i = (size/2); i > 1; i /= 2)

Page 55: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

48

for (int j = 0; j < i; j++) insertionsort(j, size-j, i); insertionsort(0, size, 1); } };

class ShellSort2 extends AlgoTri { ShellSort2 (int t, VueTris v) { super("Shell sort2", t, v); }

void insertionsort (int offset, int n, int incr) { for (int i = incr; i < n; i+= incr) for (int j = i; (j >= incr) && compare(j+offset, j+offset-incr)< 0; j-=incr) exchange(j+offset, j+offset-incr); } public void sort () { // here, we use a smarter increment suite: n(i) = 3 n(i-1) + 1 int maxi=1; while(maxi < size - 1) maxi=3*maxi+1; for (int i = maxi/3; i > 1; i /= 3) for (int j = 0; j < i; j++) insertionsort(j, size-j, i); insertionsort(0, size, 1); } };

4. Algoritma prosedur Shell sort (CompSci-1MD3, 2002) procedure shellsort; var step : integer; begin step := 1; repeat step := 3*step+1 until step > n; repeat step := step div 3; { do insertion sort, ... } { ... with specified step size } until step = 1; end;

Berikut contoh pengurutan data ascending dengan metode Shell sort,

untuk sebuah vektor K yang memiliki delapan elemen data dalam kondisi acak

yaitu sebagai berikut:

Page 56: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

49

90 15 95 30 35 100 12 25

Jika jarak untuk melakukan perbandingan pada langkah pertama adalah

N/2 atau sama dengan 4, maka jarak perbandingan pada langkah kedua adalah

3, jarak pada langkah ketiga adalah 2, pada langkah keempat adalah 1, dan

kemudian proses akan dihentikan. Secara terinci, proses pengurutan data

dengan metode Shell sort untuk vektor K adalah seperti ditunjukan dalam Tabel

2.1. Tanda garis bawah adalah menunjukan posisi awal data yang akan saling

dibandingkan pada langkah selanjutnya. Hasil akhir yang diperoleh adalah vektor

urut ascending, yaitu:

12 15 25 30 35 90 95 100

Tabel 2.1: Contoh pengurutan data ascending dengan metode Shell sort Iterasi ke Jarak Hasil proses

0

1

2

3

4

-

4

3

2

1

90 15 95 30 35 100 12 25 35 15 12 25 90 100 95 30 25 15 12 35 30 100 95 90 12 15 25 35 30 90 95 100 12 15 25 30 35 90 95 100

4.2. Desain Program Aplikasi Versi Pertama

Untuk mempermudah analisis dalam penelitian ini, maka perlu

dikembangkan alat bantu berupa program aplikasi komputer. Aplikasi akan ditulis

dengan menggunakan bahasa pemrograman Turbo Pascal. Program aplikasi

dibuat dalam dua versi, yaitu versi pertama untuk prosedur asli dan versi kedua

Page 57: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

50

untuk hasil perbaikan. Untuk masing-masing versi, program aplikasi terdiri atas

empat bagian/modul, yaitu:

1. Bagian/modul untuk input data sumber

2. Bagian/modul untuk proses pengurutan data secara ascending

3. Bagian/modul untuk proses pengurutan data secara descending

4. Bagian/modul untuk menampilkan informasi pengecekan hasil pengurutan

Program aplikasi dikembangkan berdasarkan algortima prosedur yang

telah tersedia dan banyak digunakan hingga saat ini. Struktur program aplikasi

komputer yang dikembangkan adalah ditunjukkan oleh Gambar 4.2.

Gambar 4.2: Struktur program aplikasi

Tampilan dialog layar utama program aplikasi yang dikembangkan

adalah ditunjukkan oleh Gambar 4.3.

Gambar 4.3: Tampilan dialog layar utama

PENGURUTAN DATA DENGAN METODE SHELL SORT

INPUT DATA

PROSES PENGURUTAN DESCENDING

PROSES PENGURUTAN ASCENDING

CEK HASIL PENGURUTAN

PENGURUTAN DATA DENGAN METODE SHELL SORT

1. INPUT DATA 2. PENGURUTAN SECARA ASCENDING 3. PENGURUTAN SECARA DESCENDING 4. CEK HASIL PENGURUTAN 5. SELESAI MASUKAN PILIHAN ANDA [1..5] :

Page 58: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

51

Fungsi masing-masing bagian/modul program aplikasi yang dirancang

adalah sebagai berikut:

1. INPUT DATA

Bagian/modul ini berfungsi sebagai tempat pemasukan data sumber yang

akan diurutkan. Bagian/modul ini merupakan tampilan dialog layar untuk input

data sebagaimana ditunjukkan oleh Gambar 4.4.

Gambar 4.4: Dialog layar input data

2. PROSES PENGURUTAN ASCENDING

Bagian/modul ini berfungsi sebagai tempat pemrosesan pengurutan data

secara ascending. Bagian/modul ini merupakan tampilan dialog pengurutan

data secara ascending sebagaimana ditunjukkan oleh Gambar 4.5.

Gambar 4.5: Tampilan dialog layar pengurutan ascending

INPUT DATA

MASUKAN CACAH DATA SUMBER: 999 MASUKAN NILAI DATA KE-1 : 999 MASUKAN NILAI DATA KE-2 : 999 . . : . . : MASUKAN NILAI DATA KE-N : 999 TEKAN ENTER UNTUK KEMBALI KE MENU UTAMA

PENGURUTAN ASCENDING

CACAH DATA SUMBER : 999 DATA SUMBER : 999 999 999 999 999 999 999 999 999 999 HASIL PENGURUTAN : 999 999 999 999 999 999 999 999 999 999 TEKAN ENTER UNTUK KEMBALI KE MENU UTAMA

Page 59: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

52

3. PROSES PENGURUTAN DESCENDING

Bagian/modul ini berfungsi sebagai tempat pemrosesan pengurutan data

secara descending. Bagian/modul ini merupakan tampilan dialog layar untuk

pengurutan data descending sebagaimana ditunjukkan oleh Gambar 4.6.

Gambar 4.6: Tampilan dialog layar pengurutan descending

4. CEK HASIL PENGURUTAN

Bagian/modul ini berfungsi sebagai tempat menampilkan informasi

pengecekan hasil pengurutan data. Bagian ini mempunyai dua kemungkinan,

yaitu hasil proses pengurutan ascending atau descending sesuai pilihan.

Bagian/modul ini merupakan tampilan dialog layar sebagaimana ditunjukkan

oleh Gambar 4.7, Gambar 4.8, Gambar 4.9 dan Gambar 4.10.

Gambar 4.7: Dialog layar hasil pengecekan pengurutan ascending (1)

PENGURUTAN DESCENDING

CACAH DATA SUMBER : 999 DATA SUMBER : 999 999 999 999 999 999 999 999 999 999 HASIL PENGURUTAN : 999 999 999 999 999 999 999 999 999 999 TEKAN ENTER UNTUK KEMBALI KE MENU UTAMA

CEK HASIL PENGURUTAN ASCENDING

HASIL PENGURUTAN SUDAH BENAR …! TEKAN ENTER UNTUK KEMBALI KE MENU UTAMA

Page 60: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

53

Gambar 4.8: Dialog layar hasil pengecekan pengurutan ascending (2)

Gambar 4.9: Dialog layar hasil pengecekan descending (1)

Gambar 4.10: Dialog layar hasil pengecekan descending (2)

Program aplikasi dirancang hanya untuk mengolah input berupa bilangn

bulat dengan cacah data maksimal 100 buah. Hal ini dilakukan dengan alasan

program aplikasi hanya dimaksudkan sebagai alat bantu untuk menganalisis

validitas algoritma prosedur, bukan untukpengolahan data yang kompleks.

Statemen utama yang digunakan dalam program aplikasi antara lain adalah:

1. Statemen input : berfungsi untuk memasukkan data sumber, yaitu

menggunakan statemen READ dan READLN

CEK HASIL PENGURUTAN ASCENDING

HASIL PENGURUTAN TIDAK BENAR …! KESALAHAN PADA NILAI : 999 URUTAN : 999 TEKAN ENTER UNTUK KEMBALI KE MENU UTAMA

CEK HASIL PENGURUTAN DESCENDING

HASIL PENGURUTAN SUDAH BENAR …! TEKAN ENTER UNTUK KEMBALI KE MENU UTAMA

CEK HASIL PENGURUTAN DESCENDING

HASIL PENGURUTAN TIDAK BENAR …! KESALAHAN PADA NILAI : 999 URUTAN : 999 TEKAN ENTER UNTUK KEMBALI KE MENU UTAMA

Page 61: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

54

2. Statemen output : berfungsi untuk menampilkan data hasil proses

pengurutan data, yaitu menggunakan statemen WRITE dan WRITELN

3. Statamen GOTOXY : berfungsi untuk untuk pengaturan tampilan input

dan output dalam dialog tampilan layar

4. Statemen FOR TO DO: berfungsi sebagai satemen kendali proses

perulangan selama pemasukan, pemrosesan mapun penampilan hasil

5. Statemen IF THEN : berfungsi sebagai statemen kendali pada saat

pembandingan nilai-nilai data

6. Statemen WHILE DO : berfungsi sebagai statemen kendali pada saat

penentuan lokasi penyisipan secara biner

Berdasarkan informasi yang diperoleh dari pengecekan hasil proses

pengurutan untuk beberapa data sumber yang berbeda, selanjutnya dapat

dianalisis permasalahan yang masih mungkin muncul dalam metode Shell sort.

Hasil analisis tersebut, selanjutnya dapat digunakan sebagai dasar untuk

melakukan perbaikan metode Shell sort. Program aplikasi versi pertama,

selanjutnya dimodifikasi menjadi versi kedua berdasarkan hasil analisis yang

diperoleh tersebut.

4.3. Permasalahan Yang Mungkin Terjadi

Untuk menguji validitas algoritma prosedur pengurutan data menggunakan

metode Shell sort, berikut akan diberikan sebuah contoh lain. Jika vektor K yang

akan diurutkan memuat 7 elemen data numerik, yaitu:

7 3 2 5 4 1 6

Page 62: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

55

Selanjutnya, vektor K akan diurutkan secara ascending menggunakan

algoritma prosedur Shell sort. Jarak yang digunakan pada langkah pertama

adalah:

N div 2

atau

9 div 2 = 4

Selanjutnya, pada langkah kedua akan digunakan jarak 4, pada langkah

ketiga akan digunakan jarak 3, pada langkah keempat akan digunakan jarak 2,

dan akhirnya pada langkah kelima akan digunakan jarak 1. Secara terinci,

langkah pengurutannya adalah sebagai berikut:

Langkah 1:

Jarak : 7 div 2 = 3

Vektor sumber:

Urutan : 1 2 3 4 5 6 7

Data : 7 3 2 5 4 1 6

Dengan jarak 3, maka,

⇒ 7 akan dibandingkan dengan 5, karena 7>5 maka posisi

urutan data dibalik

⇒ 3 akan dibandingkan dengan 4, karena 3<4 maka posisi

urutan data tetap

⇒ 2 akan dibandingkan dengan 1, karena 2>1 maka posisi

urutan data dibalik

⇒ 5 akan dibandingkan dengan 6, karena 5<6, maka posisi

urutan data tetap

Page 63: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

56

Proses dalam Langkah 1 akan memberikan hasil sebagai berikut:

Urutan : 1 2 3 4 5 6 7

Data : 5 3 1 6 4 2 7

Langkah 2:

Jarak : 3-1 = 2

Vektor sumber:

Urutan : 1 2 3 4 5 6 7

Data : 5 3 1 6 4 2 7

Dengan jarak 2, maka,

⇒ 5 akan dibandingkan dengan 1, karena 5>1 maka posisi

urutan data dibalik

⇒ 3 akan dibandingkan dengan 6, karena 3<6 maka posisi

urutan data tetap

⇒ 5 akan dibandingkan dengan 4, karena 5>4 maka posisi

urutan data dibalik

⇒ 6 akan dibandingkan dengan 2, karena 6>2, maka posisi

urutan data dibalik

⇒ 5 akan dibandingkan dengan 7, karena 5<7, maka posisi

urutan data tetap

Proses dalam Langkah 2 akan memberikan hasil sebagai berikut:

Urutan : 1 2 3 4 5 6 7

Data : 1 3 4 2 5 6 7

Page 64: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

57

Langkah 3:

Jarak : 2-1 = 1

Vektor sumber:

Urutan : 1 2 3 4 5 6 7

Data : 1 3 4 2 5 6 7

Dengan jarak 1, maka,

⇒ 1 akan dibandingkan dengan 3, karena 1<3 maka posisi

urutan data tetap

⇒ 3 akan dibandingkan dengan 4, karena 3<4 maka posisi

urutan data tetap

⇒ 4 akan dibandingkan dengan 2, karena 4>2 maka posisi

urutan data dibalik

⇒ 4 akan dibandingkan dengan 5, karena 4<5, maka posisi

urutan data tetap

⇒ 5 akan dibandingkan dengan 6, karena 5<6, maka posisi

urutan data tetap

⇒ 6 akan dibandingkan dengan 7, karena 6<7, maka posisi

urutan data tetap

Proses dalam Langkah 3 akan memberikan hasil sebagai berikut:

Urutan : 1 2 3 4 5 6 7

Data : 1 3 2 4 5 6 7

Berdasarkan contoh diatas, maka ternyata dijumpai adanya kesalahan hasil

pengurutan pada vektor K. Hasil akhir yang diperoleh adalah vektor baru yang

memiliki urutan elemen sebagai berikut:

1 3 2 4 5 6 7

Page 65: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

58

Hasil yang benar dan seharusnya diperoleh adalah:

1 2 3 4 5 6 7

Terlihat, bahwa elemen data bernilai 3 menempati pada urutan kedua dan

elemen data bernilai 2 justru menempati urutan ketiga. Seharusnya elemen data

bernilai 2 menempati pada urutan kedua dan elemen data bernilai 3 menempati

urutan ketiga.

Kasus ini menunjukkan bahwa penggunaan algoritma prosedur Shell sort

yang umumnya menggunakan jarak N div 2 sebagai jarak perbandingan pada

langkah pertama, (N div 2) -1 sebagai jarak perbandingan pada langkah kedua,

(N div 2) -2 sebagai jarak perbandingan pada langkah ketiga, dan seterusnya

hingga akhirnya proses dihentikan setelah jarak = 1 selesai diproses, ternyata

tidak memberikan jaminan hasil yang valid.

4.4. Alteratif Solusi Perbaikan

Permasalahan utama penyebab kesalahan hasil pengurutan dengan

menggunakan metode Shell sort dalam contoh di atas adalah penetapan jarak

perbandingan antar data, utamanya pada penetapan jarak untuk langkah

pertama. Oleh karena itu, maka solusi perbaikan yang dilakukan adalah harus

difokuskan pada hal tersebut.

Alternatif solusi perbaikan yang dapat dilakukan untuk menghindari

kesalahan hasil pengurutan menggunakan metode Shell sort adalah sebagai

berikut:

1. Jarak perbandingan adalah dimulai pada nilai ((N div 2)+1) bukan (N

div 2) , pada langkah selanjutnya (N div 2), ((N div 2)-1), ((N div 2)-2)

dan seterusnya

Page 66: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

59

2. Jarak perbandingan untuk langkah pertama adalah dimulai pada nilai

(N-1) bukan (N div 2), pada langkah selanjutnya (N-2), (N-3), dan

seterusnya

Alternatif solusi 1 memiliki kelebihan dalam hal efisiensi utamanya waktu

proses dibandingkan dengan alternatif solusi 2, namun solusi 1 relatif kurang

aman dibandingkan dengan solusi 2. Sedangkan alternatif 2 sangat tidak efisien,

namun relatif jauh lebih aman dibandingkan solusi 1. Dalam hal cacah data

sangat besar, maka alternatif solusi 1 lebih baik digunakan daripada alternatif

solusi 2. Dalam hal waktu proses bukan menjadi permasalaahn utama, maka

solusi 2 lebih baik dibandingkan solusi 1.

Alternatif solusi tersebut dapat dilakukan dengan memberikan modifikasi pada

algoritma prosedur pengurutan. Masing-masing dapat dituliskan di bawah ini.

Solusi 1: Masukan vektor K yang memuat N buah data yang akan diurutkan. Data-data yang akan diurutkan dibaca sebagai X.

1. Mulai 2. Tentukan harga awal jarak perbandingan data.

JARAK = (N div 2)+1 3. Proses berulang langkah-4 s/d langkah-7

while jarak >= 1 4. Proses berulang langkah-5 s/d langkah-6 untuk mengurutkan data

FOR I = 1 TO N-JARAK 5. Tentukan

J = I + JARAK 6. Bandingkan antar data

IF X[I] > X[J] Jika ya, tukarkan posisi kedua data

BANTU = X[I] X[I] = X[J] X[J] = BANTU

7. Tentukan jarak baru untuk langkah berikutnya JARAK = JARAK-1

8. Cetak hasil 9. Selesai

Page 67: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

60

Solusi 2: Masukan vektor K yang memuat N buah data yang akan diurutkan. Data-data yang akan diurutkan dibaca sebagai X.

1. Mulai 2. Tentukan harga awal jarak perbandingan data.

JARAK = N-1 3. Proses berulang langkah-4 s/d langkah-7

while jarak >= 1 4. Proses berulang langkah-5 s/d langkah-6 untuk mengurutkan data

FOR I = 1 TO N-JARAK 5. Tentukan

J = I + JARAK 6. Bandingkan antar data

IF X[I] > X[J] Jika ya, tukarkan posisi kedua data

BANTU = X[I] X[I] = X[J] X[J] = BANTU

7. Tentukan jarak baru untuk langkah berikutnya JARAK = JARAK-1

8. Cetak hasil 9. Selesai

4.5. Analisis Algoritma Alternatif Solusi 1

Untuk menguji validitas algoritma prosedur alternatif solusi 1, maka contoh

pengurutan data yang salah sebelumnya akan diselesaikan menggunakan solusi

1. Vektor K yang akan diurutkan memuat 7 elemen data numerik, yaitu:

7 3 2 5 4 1 6

Secara ringkas, prosedur pengurutan data secara ascending menggunakan

alternatif solusi 1 akan ditampilkan dalam bentuk tabel seperti tampak pada

Tabel 4.2. Hasil akhir yang diperoleh adalah vektor baru dalam kondisi urut

secara ascending, yaitu:

1 2 3 4 5 6 7

Dengan demikian, maka alternatif solusi 1 telah mampu memberikan hasil

yang valid, dengan efisiensi waktu yang relatif cukup baik.

Page 68: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

61

Tabel 2.2: Contoh pengurutan data ascending dengan solusi 1 Iterasi ke Jarak Hasil proses

0

1

2

3

4

-

4

3

2

1

7 3 2 5 4 1 6 4 1 2 5 7 3 6 4 1 2 5 7 3 6 2 1 4 3 6 5 7 1 2 3 4 5 6 7

4.6. Analisis Algoritma Alternatif Solusi 2

Untuk menguji validitas algoritma prosedur alternatif solusi 2, maka contoh

pengurutan data yang salah sebelumnya akan diselesaikan menggunakan solusi

1. Vektor K yang akan diurutkan memuat 7 elemen data numerik, yaitu:

7 3 2 5 4 1 6

Secara ringkas, prosedur pengurutan data secara ascending menggunakan

alternatif solusi 1 akan ditampilkan dalam bentuk tabel seperti tampak pada

Tabel 4.3. Solusi 2 telah mampu memberikan hasil yang valid, dengan efisiensi

waktu yang relatif kurang baik dibandingkan dengan solusi 1.

Tabel 2.3: Contoh pengurutan data ascending dengan solusi 2

Iterasi ke Jarak Hasil proses 0

1

2

3

4

5

6

-

6

5

4

3

2

1

7 3 2 5 4 1 6 6 3 2 5 4 1 7 1 3 2 5 4 6 7 1 3 2 5 4 6 7 1 3 2 5 4 6 7 1 3 2 5 4 6 7 1 2 3 4 5 6 7

Page 69: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

62

4.7. Implementasi Program Aplikasi Versi Kedua

Implementasi ke dalam program aplikasi komputer untuk versi kedua dapat

dilakukan dengan sedikit mengubah nilai variabel Jarak yang digunakan dimulai

pada langkah pertama kali. Sedangkan bagian lain dalam program relatif sama

dengan metode Shell sort dasar.

Page 70: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

63

BAB V KESIMPULAN

Penelitian ini bertujuan untuk mengkaji kemungkinan adanya kelemahan

dalam metode Shell sort dan memberikan perbaikan terhadap metode tersebut

sehingga diperoleh jaminan bahwa penggunaan metode yang sudah diperbaiki

tersebut akan memberikan hasil berupa data urut naik / turun.

Berdasarkan hasil analisis algoritma yang dilakukan dan hasil output

yang dihasilkan program aplikasi pengurutan data dengan metode Shell sort

yang dikembangkan, maka dapat disimpulkan sebagai berikut:

1. Algoritma prosedur Shell sort dasar yang menggunakan jarak awal N div 2

sebagai jarak awal untuk perbandingan ternyata masih memungkinkan

menimbulkan kesalahan hasil operasi

2. Alternatif solusi yang bisa dilakukan untuk menghindari kesalahan tersebut

adalah:

a. Jarak perbandingan adalah dimulai pada nilai ((N div 2)+1) bukan (N

div 2) , pada langkah selanjutnya (N div 2), ((N div 2)-1), ((N div 2)-2)

dan seterusnya

b. Jarak perbandingan untuk langkah pertama adalah dimulai pada nilai

(N-1) bukan (N div 2), pada langkah selanjutnya (N-2), (N-3), dan

seterusnya

3. Kesalahan hasil pengurutan data dengan metode Shell sort juga bisa terjadi

pada saat pengurutan secara descending, dan perbaikannya dapat

dilakukan dengan cara yang sama dengan alternatif solusi 1 dan 2, tetapi

penukaran akan dilakukan jika nilai data pada urutan lebih awal kurang dari

nilai data pada urutan yang lebih akhir

Page 71: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

64

Hasil penelitian ini diharapkan memberikan masukan bagi para

pemrogram aplikasi dalam menerapkan metode Shell sort agar terhindar dari

kesalahan hasil operasi.

Page 72: 2004 Edhy Sutanta Laporan Penelitian 30 Juni 2004 Hal i-vii dan 1 ...

65

DAFTAR PUSTAKA

Alfred V., Aho; Hopcraft, John; Ullman, Jefffrey D., The Design and Analysis of Computer Algorithms, NHSS Addison Wesley Publising Co. Behforooz, Ali; Holoien, Martin O., 1986, Problem Solving and Structured Programming with PASCAL, Brooks/Cole Publishing Co., A Division of Wadworth Inc., California Brand, Kolman W., 1986, Problem Solving with PASCAL, Kent Publishing Co., A Division of Wadworth Inc., USA Goodman, SE.; Hedetniemi, S.T., 1985, Introduction to the Design and Analysis of Algorithms, Mc.Graw_Hill Int’l Book Co. Lipshutz, Martin M.; Lipschutz, Seymour, 1982, Theory and Problems of Data Processing, Schaum’s Outline Series, McGraw_Hill Int’l Book Co. Lipschutz, Seymour; Lipson, Marc L., 1992, 2000 Solved Problems in Discrette Mathematics, Mc.Graw_Hill Int’l Book Co., USA Lisanti, Barbara; Mann, Lydia; Zlotnick Freed, 1987, Algorithms, Programming, Pascal, Wardworth Publishing Co., California Trembly, Jean P.,; Bunt, Richard B., 1981, An Introduction to Computer Science an Algorithmic Approach, Int’l Student edition, McGraw_Hill Int’l Book Co., Singapore Trembly ; Sorenson, An Introduction to the Design and Analysis of Algorithms, McGraw_Hill Int’l Book Co. Wirth, Niklaus, 1991, Algorithms + Data Structures = Programs, Prentice Hall Int’l Inc., Englewood Clifs, New Jersey