Analisis Pengaruh Struktur Data Terhadap Kompleksitas Waktu Komputasi Algoritma Selection Sort Dan Merge Sort

(1)

ANALISIS PENGARUH STRUKTUR DATA TERHADAP KOMPLEKSITAS WAKTU KOMPUTASI ALGORITMA SELECTION SORT

DAN MERGE SORT

TESIS

JIJON SAGALA 117038054

PROGRAM STUDI MAGISTER (S2) TEKNIK INFORMATIKA

FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI

UNIVERSITAS SUMATERA UTARA

MEDAN


(2)

ANALISIS PENGARUH STRUKTUR DATA TERHADAP KOMPLEKSITAS WAKTU KOMPUTASI ALGORITMA SELECTION SORT

DAN MERGE SORT

TESIS

Diajukan untuk melengkapi tugas dan memnuhi syarat memperoleh ijazah Magister Teknik Informatika

JIJON SAGALA 117038054

PROGRAM STUDI MAGISTER (S2) TEKNIK INFORMATIKA

FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI

UNIVERSITAS SUMATERA UTARA

MEDAN


(3)

PERSETUJUAN

Judul Tesis : ANALISIS PENGARUH STRUKTUR DATA TERHADAP KOMPLEKSITAS WAKTU KOMPUTASI ALGORITMA SELECTION SORT DAN MERGE SORT

Nama Mahasiswa : JIJON SAGALA No. Induk Mahasiswa : 117038054

Program Studi : MAGISTER TEKNIK INFORMATIKA

Fakultas : ILMU KOMPUTER DAN TEKNOLOGI INFORMASI

UNIVERSITAS SUMATERA UTARA

Komisi Pembimbing :

Pembimbing 2 Pembimbing 1

Prof. Dr. Drs. Iryanto, M.Si Prof. Drs. Tulus, Vordipl.Math, M.Si, Ph.D

Diketahui/Disetujui oleh

Program Studi S2 Teknik Informatika Ketua,

Prof. Dr. Muhammad Zarlis Nip. 19570701 198601 1 003


(4)

PERNYATAAN

ANALISIS PENGARUH STRUKTUR DATA TERHADAP KOMPLEKSITAS WAKTU KOMPUTASI ALGORITMA SELECTION SORT

DAN MERGE SORT

TESIS

Saya yang mengakui bahwa tesis ini adalah hasil karya tulis saya sendiri, kecuali beberapa kutipan dan ringkasan yang masing-masing telah saya sebutkan sumbernya.

Medan, 30 Oktober 2013

JIJON SAGALA NIM : 110738054


(5)

PERNYATAAN PERSETUJUAN PUBLIKASI KARYA ILMIAH UNTUK KEPENTINGAN

AKADEMIS

Sebagai civitas akademika Universitas Sumatera Utara, saya yang bertanda tangan dibawah ini :

Nama : Jijon Sagala

NIM : 117038054

Program Studi : S2 Teknik Informatika Jenis Karya Ilmiah : Tesis

Demi pengembangan ilmu pengetahuan, menyetujui untuk memberikan kepada Universitas Sumatera Utara Hak Bebas Royalti Non-Eksklusif ( Non-Exclusive Rayalty Free Eight ) atas tesis saya yang berjudul:

ANALISIS PENGARUH STRUKTUR DATA TERHADAP KOMPLEKSITAS WAKTU KOMPUTASI ALGORITMA SELECTION SORT

DAN MERGE SORT

Beserta perangkat yang ada(jika diperlukan). Dengan Hak Bebas Royalti Non-Eksklusif ini, Universitas Sumatera Utara berhak menyimpan, mengalih media, menformat, mengelola dalam bentuk database, merawat dan mempublikasikan tesis saya tanpa meminta izin dari saya selama tetap mencantumkan nama saya sebagai penulis dan sebagai pemegang dan/atau sebagai pemilik hak cipta

Demikian pernyataan ini dibuat dengan sebernarnya.

Medan, 30 Oktober 2013

Jijon Sagala 117038054


(6)

Telah diuji pada

Tanggal : Rabu 30 Oktober 2013

PANITIA PENGUJIAN TESIS

Ketua : Prof. Drs. Tulus, Vordipl.Math, M.Si, Ph.D

Anggota : 1. Prof. Dr. Drs. Iryanto, M.Si 2. Prof. Dr. Muhammad Zarlis 3. Prof. Dr. Herman Mawengkang 4. Dr. Erna Budhiarti Nababan, M.IT


(7)

DAFTAR RIWAYAT HIDUP

DATA PRIBADI

Nama Lengkap ( Berikut Gelar ) : Jijon Sagala, S.Kom

Tempat dan Tanggal Lahir : Situnggaling, 4 September 1984

Alamat Rumah : Jln. B.W. Kusuma No.14C, Pasar 4 Padang Bulan Telepon/Fax/HP : 081361587795

E-Mail : jhi_sgl@yahoo.com

Instansi Tempat Bekerja : YPN Medicom

Alamat Kantor : Jln. Bantam No 12 Medan

DATA PENDIDIKAN

SD SD Inpres Merek TAMAT 1998

SMP SMP Negeri 1 Merek TAMAT 2001

SMA SMA Sw Dharma Pancasila Medan TAMAT 2004

D1 PABT D1 Medicom Medan TAMAT 2005

D3 AMIK D3 Medicom Medan TAMAT 2007

S1 STMIK Sisingamangaraja XII Medan TAMAT 2011


(8)

UCAPAN TERIMA KASIH

Puji dan syukur kehadirat Tuhan Yang Maha Esa atas anugerahNya dan berkatNya Penulis

dapat menyelesaikan Tesis ini, yang berjudul “ ANALISIS PENGARUH STRUKTUR DATA TERHADAP KOMPLEKSITAS WAKTU KOMPUTASI ALGORITMA

SELECTION SORT DAN MERGER SORT ”. Tesis ini merupakan Tugas Akhir pada

Program Studi Magister S2 Teknik Informatika Fakultas Ilmu Komputer dan Teknologi Informasi, Universitas Sumatera Utara.

Dalam menyelesaikan pendidikan di Program Studi Magister S2 Teknik Informatika Universitas Sumatera Utara ini, penulis banyak mendapat dukungan dari berbagai pihak, maka pada kesempatan ini Penulis mengucapkan terima kasih dan penghargaan yang sebesar-besarnya kepada:

1. Prof. Dr. dr. Syahril Pasaribu, DTM&H, M.Sc(CTM), Sp,A(K) selaku Rektor Universitas Sumatera Utara.

2. Prof. Dr. Muhammad Zarlis selaku Dekan Fakultas Ilmu Komputer dan Teknologi Informasi Universitas Sumatera Utara dan Ketua Program Studi Magister Teknik Informatika dan juga sebagai pembanding pada penulisan Tesis ini dan berkat saran dan bantuanya beliau sehingga penulisan Tesis ini dapat diselesaikan dengan baik.

3. Muhammad Andri Budiman, ST., M.Comp.Sc., selaku sekretaris Program Studi Magister Teknik Informatika yang telah banyak memberikan bantuan dan motivasinya selama perkuliahan sehingga Penulis dapat menyelesaikan Tesis dan Perkualiahan ini. 4. Prof. Drs. Tulus, Vordipl.Math, M.Si, Ph.D, selaku Ketua Komisi Pembimbing pada

penulisan Tesis ini, berkat dorongan dan bantuan beliau sehingga penulisan Tesis ini dapat diselesaikan dengan baik.

5. Prof. Dr. Drs. Iryanto, M.Si, selaku Anggota Komisi Pembimbing II yang telah memberikan bimbingan dan petunjuk sehingga Tesis ini dapat diselesaikan dengan baik.

6. Prof. Dr. Herman Mawengkang selaku pembanding, atas saran dan bantuanya untuk kesempurnaan penulisan Tesis ini serta bimbingan selama perkuliahan berlangsung.


(9)

7. Dr. Erna Budhiarti Nababan, M.IT selaku pembanding, atas saran dan bantuanya untuk kesempurnaan penulisan Tesis ini serta bimbingan selama perkuliahan berlangsung. 8. Seluruh Staf pengajar pada Program Studi Magister Teknik Informatika, Fakultas Ilmu

Komputer dan Teknologi Informasi Universitas Sumatera Utara, yang telah memberikan ilmu pengetahuan kepada penulis selama perkuliahan hingga selesai. 9. Seluruh Staf administrasi Program Studi Magister Teknik Informatika mbak Widia,

mbak Ines, bang Jawaher dan yang lainnya yang telah banyak memberikan bantuan dan pelayanan terbaik kapada Penulis.

10.Seluruh rekan-rekan seperjuangan mahasiswa angkatan ketiga stambuk 2011 Kom B Pak Pirmando Gultom, Bu Ertina Barus, Pak Andi Marwan, Bu Yulia Dalimunthe, Bu Fitri Marina, Pak Arman Barus, Pak Arta Pinem, Bu Wulan, Pak Muhazir dan yang lainnya, yang telah bersama-sama selama perkuliahan atas kerjasama, kebersamaan dan saling pengertiannya selama ini dalam mengatasi berbagai masalah yang dihadapi selama perkualiahan tanpa menegenal lelah sehingga tugas-tugas bersama dapat diselesaikan dengan baik.

11.dr. Reinhard Silalahi selaku Pimpinan Yayasan Pendidikan Nasional Medicom beserta seluruh staf yayasan dan staf pengajar yang telah memberikan dorongan dan dukungan sehingga Penulis dengan tetap suka cita dan bersemangat untuk menyelesaikan kuliah dengan baik.

12.Penulis menyampaikan terima kasih yang sangat luar biasa pada istri tercinta Marisa Natarlian Br Ginting, S.Pd atas cinta dan kasih serta doa yang tulus diberikan kepada penulis, sehingga dapat menyelesaikan Tesis dengan baik.

13.Penulis menyampaikan terima kasih yang tak terhingga kepada Bapak tercinta J. Sagala dan Mamak Tersayang S Br Munthe, saudaraku terkasih bang Jasa Sagala & Kak Rentina Br Sijabat, Kak Risa Br Sagala & bang Adi, Kak Riahta Br Sagala, SE, bang Junner Sagala & Kak Erti Br Sidabuke dan Adiku Irma Sari Br Sagala, SS serta keponakan ku Ozi, Enjel, Destri, Jesen Sagala, Jon Steven Sagala dan Jaren Sagala, kasih sayang dan dukungan tulus dari kalian adalah semangat hidupku.

14.Penulis juga menyampaikan terima kasih yang sangat besar kepada Bapak Mertua D. Ginting dan Ibu Mertua R Br Sebayang serta silihku Yuda Ginting & Novita Br Sembiring, Ari Widana Ginting, Amd dan Rio Febri Ginting, Amd dan keponaku Zikri


(10)

Ginting, Giovani Ginting dan Tercio Ginting yang telah banyak memberikan doa yang tulus dan dukungan kepada penulis.

Kepada semua pihak yang telah turut membantu penulisan Tesis ini baik langsung maupun tidak langsung yang penulis dapatkan selama ini. Semoga Tesis ini bermanfaat bagi pembaca dan pihak-pihak yang membutuhkannya.

Medan, 30 Oktober 2013 Penulis,

Jijon Sagala 117038054


(11)

ABSTRAK

Seiring berkembangnya kemajuan di bidang informatika dan komputasi, tuntutan untuk menemukan metode pemecahan masalah secara lebih tepat, efektif dan kuat menjadi sebuah kebutuhan, terutama untuk permasalahan klasik. Salah satu masalah klasik di bidang informatika dan komputasi adalah pengurutan data ( sorting ). Pengurutan data ( sorting ) memegang peranan penting dalam banyak aplikasi dan persoalan yang mengacu pada banyak data (minimal lebih dari satu), dan seringkali menjadi upa-masalah yang banyak dipertimbangkan agar keseluruhan permasalahan dapat diselesaikan dengan lebih baik dan cepat. Algoritma pengurutan (sorting) yang dipakai adalah algoritma Merge Sort dan selection sort. Pada penilitian ini akan dipaparkan penjelasan singkat dan perbandingan kecepatan dan keefektifan algoritma-algoritma pengurutan data dengan elemen integer. Kata Kunci :Algoritma Pengurutan, Kompleksitas waktu, Selection Sort, Merge Sort


(12)

DATA STRUCTURE INFLUENCE ANALYSIS TOWARDS ALGORITHM COMPUTATION TIME COMPLEXITY SELECTION SORT

AND MERGE SORT

ABSTRACT

As the development advances in the field of informatics and computing, the demand to find a method of solving the problem more precise, effective and powerful become a necessity, especially for classical problems. One of the classic problems in the field of informatics and computing are data sorting (sorting). Data sorting (sorting) plays an important role in many applications and issues that refer to the data (at least more than one), and the ceremony is often a problem that many considered that the whole problem can be solved with better and faster. Sorting algorithms (sorting) is used and the Merge Sort algorithm selection sort. In this research will be presented a brief description and comparison of the speed and effectiveness of data sorting algorithms with integer elements.


(13)

DAFTAR ISI

Halaman

PENGESAHAN ii

PERNYATAAN ORISINALITAS iii

PERSETUJUAN PUBLIKASI iv

PANITIA PENGUJI v

RIWAYAT HIDUP vi

UCAPAN TERIMA KASIH vii

ABSTRAK x

ABSTACT xi

DAFTAR ISI xii

DAFTAR TABEL xiv

DAFTAR GAMBAR xv

BAB 1 PENDAHULUAN 1

1.1Latar Belakang Masalah 1

1.2 Perumusan Masalah 3

1.3 Batasan Masalah 3

1.4 Tujuan Penelitian 3

BAB 2 TINJAUAN PUSTAKA 4

2.1 Pengertian Algoritma 4

2.2 Algoritma Pengurutan 5

2.3 Kompleksitas Algoritma 6

2.4 Growth Function 7

2.5 Notasi Asimptotik 8

2.6 Pengertian Selection Sort 8

2.7 Pengertian Merge Sort 9

2.8 Struktur Data 10

2.9 Penelitian Terdahulu 12

BAB 3 METODOLOGI PENELITIAN 13


(14)

3.1.1 Pseudocode Minimum Selection Sort 13

3.1.2 Pseudocode Maximum Selection Sort 14

3.1.3 Loop Invariant Minimum Selection Sort 14 3.2 Simulasi Algoritma Pengurutan Selection Sort 15 3.3 Analisis Dan Running Time Selection Sort 17

3.4 Selection Sort Model Insert(Sisip) 18

3.4.1 Pseudecode Selection Sort Model Insert 18 3.4.2 Simulasi Algoritma Pengurutan Selection Sort Model Insert 19

3.5 Selection Sort Model New List(Dua List) 20

3.5.1 Pseudecode Selection Sort Model New List 20 3.5.2 Simulasi Algoritma Pengurutan Selection Sort Model New List 20

3.6 Penjelasan Singkat Merge Sort 21

3.6.1 Pseudocode Merge Sort 21

3.6.2 Loop Invariant Pada Prosedure Merge Sot 22

3.7 Simulasi Algoritma Merge Sort 23

3.8 Analisis Dan Running Time Merge Sort 28

BAB 4 HASIL DAN PEMBAHASAN 30

4.1 Pendahuluan 30

4.2 Hasil Dan Uji Coba 30

4.2.1 Pengurutan pada Max Item = 10 30

4.2.2 Pengurutanpada Max Item = 500 35

4.2.3 Pengurutanpada Max Item = 1000 39

4.3 Pembahasan 44

4.4 Analisis Perbandingan Selection Sort dengan Merge Sort 45

BAB 5 KESIMPULAN DAN SARAN 47

DAFTAR PUSTAKA LAMPIRAN


(15)

DAFTAR TABEL

Tabel 2.1 Tabel Notasi Big O 7

Tabel 2.2 Perbedaan mendetail antara Array dan List 12


(16)

DAFTAR GAMBAR

Gambar 4.1 Item Tampilan hasil pada max item 10 danMax Value 1000 31

Gambar 4.2 Pengurutan pada Max Item 10 Max Item Value = 1000 32 Gambar 4.3 Grafik perbandingan keempat pengurutan untuk Max Item 10 Max

Item Value = 1000 32

Gambar 4.4 Tampilanhasilpada max item 10 danMax Item Value 1000000 33

Gambar 4.5 Hasil pengurutan pada Max item 10 dan Max Item Value 1000000 34 Gambar 4.6 Grafik perbandingan keempat pengurutan untuk Max Item 10 Max

Item Value = 1000000 35

Gambar 4.7 PengurutanPada Max Item 500 Max Item Value=1000 35 Gambar 4.8 Hasil pengurutan pada Max item 500 dan Max Item Value = 1000 36 Gambar 4.9 Grafik perbandingan keempat pengurutan untuk Max Item 500 Max

Item Value = 1000 37

Gambar 4.10 Pengurutan Pada Max Item 500 Max Item Value = 1000000 37 Gambar 4.11 Hasil pengurutan pada Max item 500 dan Max Item Value 1000000 38 Gambar 4.12 Grafik perbandingan keempat pengurutan untuk Max Item 500 Max

Item Value = 1000000 39

Gambar 4.13 PengurutanPada Max Item 1000 Max Item Value=1000 40

Gambar 4.14 Hasil pengurutan pada Max item 1000 dan Max Item Value 1000 41 Gambar 4.15 Grafik perbandingan keempat pengurutan untuk Max Item 1000

Max Item Value = 1000 41

Gambar 4.16 PengurutanPada Max Item 1000 Max Item Value=1000000 42 Gambar 4.17 Hasil pengurutan pada Max item 1000 dan Max Item Value 1000 43

Gambar 4.18 Grafik perbandingan keempat pengurutan untuk Max Item 1000


(17)

ABSTRAK

Seiring berkembangnya kemajuan di bidang informatika dan komputasi, tuntutan untuk menemukan metode pemecahan masalah secara lebih tepat, efektif dan kuat menjadi sebuah kebutuhan, terutama untuk permasalahan klasik. Salah satu masalah klasik di bidang informatika dan komputasi adalah pengurutan data ( sorting ). Pengurutan data ( sorting ) memegang peranan penting dalam banyak aplikasi dan persoalan yang mengacu pada banyak data (minimal lebih dari satu), dan seringkali menjadi upa-masalah yang banyak dipertimbangkan agar keseluruhan permasalahan dapat diselesaikan dengan lebih baik dan cepat. Algoritma pengurutan (sorting) yang dipakai adalah algoritma Merge Sort dan selection sort. Pada penilitian ini akan dipaparkan penjelasan singkat dan perbandingan kecepatan dan keefektifan algoritma-algoritma pengurutan data dengan elemen integer. Kata Kunci :Algoritma Pengurutan, Kompleksitas waktu, Selection Sort, Merge Sort


(18)

DATA STRUCTURE INFLUENCE ANALYSIS TOWARDS ALGORITHM COMPUTATION TIME COMPLEXITY SELECTION SORT

AND MERGE SORT

ABSTRACT

As the development advances in the field of informatics and computing, the demand to find a method of solving the problem more precise, effective and powerful become a necessity, especially for classical problems. One of the classic problems in the field of informatics and computing are data sorting (sorting). Data sorting (sorting) plays an important role in many applications and issues that refer to the data (at least more than one), and the ceremony is often a problem that many considered that the whole problem can be solved with better and faster. Sorting algorithms (sorting) is used and the Merge Sort algorithm selection sort. In this research will be presented a brief description and comparison of the speed and effectiveness of data sorting algorithms with integer elements.


(19)

BAB 1 PENDAHULUAN

1.1Latar Belakang Masalah

Perkembangan ilmu pengetahuan dan teknologi pada saat ini sudah sangat maju dan komputer adalah salah satu teknologi tinggi. Pengerjaan secara komputerisasi dalam aktivitas manusia baik di sekolah, instansi, perusahaan-perusahaan maupun kalangan masyarakat sangat membantu karena komputer bekerja lebih teliti, akurat dalam pengolahan data.

Pengolahan data tidak dapat dilepaskan begitu saja dari kehidupan kita sehari-hari dan komputer pada umumnya digunakan untuk mengolah data. Pengolahan data adalah pengolahan terhadap elemen-elemen data atau kombinasinya untuk membuat data itu berguna. Hasil dari pengolahan data adalah sebuah bentuk yang berarti bagi penerimanya dan bermanfaat dalam pengambilan keputusan saat ini dan mendatang atau disebut dengan informasi. Oleh karena proses pengumpulan dan pengolahan data sangat penting dilakukan karena kemudahan dan kecepatan mendapatkan informasi merupakan suatu keinginan bagi penerima atau yang membutuhkan.

Sejarah kemunculan algoritma sejalan dengan kemunculan teknologi komputer. Analisis algoritma menjadi topik bahasan utama dalam disiplin ilmu komputer. Seorang programmer komputer telah lama menggunakan algoritma untuk diterapkan pada sistem informasi manajemen yang menjalankan fungsi-fungsi akuntansi perusahaan yang disebut sistem pemrosesan transaksi (transaction information system) atau sistem pemrosesan data secara elektronik (Electronic Data Processing/EDP), yang kemudian berkembang menjadi sistem pendukung pengambilan keputusan (Decision Support System/DSS).

Algoritma adalah kumpulan instruksi yang dibuat secara jelas terhadap penyelesaian suatu masalah. Kumpulan instruksi yang dimaksud dibangun dari suatu bahasa pemograman yang dimengerti oleh komputer. Kumpulan instruksi tersebut berupa tahapan-tahapan atau langkah-langkah untuk menyelesaikan suatu pekerjaan atau penyelesaian


(20)

suatu masalah secara lebih efektif dengan sedikit sumber daya yang dilibatkan dan lebih efisien dengan durasi waktu yang dibutuhkan sedikit (cepat). Secara bebas, kita menganggap algoritma kurang lebih sama dengan suatu prosedur yang sering dikerjakan atau dilakukan sehari-hari.

Dalam analisis algoritma terdapat bagian-bagian yang dapat dianalisis, yaitu kecepatan waktu, kapasitas biaya dan kapasitas ruang. Ketiganya menggunakan notasi θ (big θ),

dengan mengetahui Notasi θ maka notasi Big O dan Big Ω dapat diketahui. Banyak metode pada proses pengolahan data, salah satu di antaranya adalah metode pengurutan (sorting), pengurutannya secara urut naik (ascending) dan pengurutan secara urut turun (descending). Pengurutan (sorting) adalah proses mengatur sekumpulan obyek menurut urutan atau susunan tertentu. Pengurutan dapat berupa nilai, objek atau nama.

Algoritma pengurutan (sorting algorithm) adalah algoritma yang menyimpan suatu list pada suatu urutan tertentu, biasanya membesar atau mengecil, biasanya digunakan untuk mengurutkan angka ataupun huruf. Efisiensi pada pengurutan ini diperlukan untuk mengoptimalkan kecepatan pemrosesan. Semakin efisien suatu algoritma, maka pada saat dieksekusi dan dijalankan akan menghabiskan waktu yang lebih sedikit dan bisa menerima lebih banyak masukan dari user. Terdapat banyak algoritma pengurutan yang sudah dibuat seperti selection sort, shell sort, heapsort, bubble sort, insertion sort, radix sort, quicksort, dan mergesort.

Data yang diolah dalam pengurutan berupa data stack, vektor, tree, array, list, double link list, maka yang di olah pada penguruan ini adalah data array dan data list. Yang menjadi domain pada kesempatan ini adalah mencoba untuk menganalisis kecepatan waktu dari semua algoritma sorting, dengan sekali inputan data berupa bilangan bulat (integer) dalam suatu list atau array. Maka dari uraian tersebut diatas, penulis merasa tertarik untuk melakukan penelitian dengan judul ANALISIS PENGARUH STRUKTUR DATA TERHADAP KOMPLEKSITAS WAKTU KOMPUTASI ALGORITMA SELECTION


(21)

1.2 Rumusan Masalah

Rumusan masalah yang akan dibahas dalam penelitian ini adalah bagaimana menganalisis pengaruh struktur data terhadap kempleksitas waktu komputasi secara teoritis dan exprerimental antara metode Selection Sort dan Merge Sort.

1.3Batasan Masalah

Berdasarkan identifikasi tersebut dan menghindari cakupan masalah yang terlalu luas, maka penulis membatasi masalah sebagai berikut :

1. Tipe struktur data yang digunakan adalah larik (array) statis dan list.

2. Data yang diinputkan bilangan positif dari 1 sampai 1.000.000 besarnya Array, data tersebut akan diacak dengan dengan nilai batasan 1 sampai 1.000.000 nilai Array dan boleh ada yang sama. Untuk menentukan efisiensi dari kedua metode pertukaran dilihat dari banyaknya pertukaran terhadap elemen data.

3. Proses pengurutan (sorting) yang dilakukan secara sequential dengan melakukan proses satu persatu.

4. Pengurutan kompleksitas(teoritikal) dengan Notasi Big θ, Big O dan Big Ω 5. Penguruan waktu (experimental) di lakukan dengan microsecond

1.4Tujuan Penelitian

Adapun tujuan yang ingin dicapai dalam penelitian ini adalah Untuk membandingkan kesesuian nilai waktu Experimental dengan Teoritikal, untuk menganalisis pengaruh Struktur data array dan struktur data list pada kinerja selection sort model Insert dan selection sort model New List. Untuk menentukan mana pengurutan yang menggunakan kompleksitas waktu paling baik .


(22)

BAB 2

TINJAUAN PUSTAKA

2.1. Pengertian Algoritma

Algoritma adalah urutan langkah-langkah logis penyelesaian masalah yang disusun secara sistematis dan logis. Kata Logis merupakan kata kunci dalam Algoritma. Langkah-langkah dalam Algoritma harus logis dan harus dapat ditentukan bernilai salah atau benar (Rosa dan Shalahuddin 2010). Kriteria Algoritma yang baik :

a. Tepat, benar, sederhana, standar dan efektif. b. Logis, terstruktur dan sistematis.

c. Semua operasi terdefinisi.

d. Semua proses harus berakhir setelah sejumlah langkah dilakukan.

e. Ditulis dengan bahasa yang standar dengan format pemrograman agar mudah untuk diimplementasikan dan tidak menimbulkan arti ganda.

Algoritma adalah jantung ilmu komputer atau informatika. Banyak cabang ilmu komputer yang diacu dalam terminologi algoritma. Namun, jangan beranggapan algoritma selalu identik dengan ilmu komputer saja. Dalam kehidupan sehari-hari pun banyak terdapat proses yang dinyatakan dalam suatu algoritma. Cara-cara membuat kue atau masakan yang dinyatakan dalam suatu resep juga dapat disebut sebagai algoritma. Pada setiap resep selalu ada urutan langkah-lankah membuat masakan. Bila langkah -langkahnya tidak logis, tidak dapat dihasilkan masakan yang diinginkan. Ibu-ibu yang mencoba suatu resep masakan akan membaca satu per satu langkah-langkah pembuatannya lalu ia mengerjakan proses sesuai yang ia baca. Secara umum, pihak (benda) yang mengerjakan proses disebut pemroses (processor). Pemroses tersebut dapat berupa manusia, komputer, robot atau alat-alat elektronik lainnya. Pemroses melakukan suatu proses dengan melaksanakan atau mengeksekusi algoritma yang menjabarkan proses tersebut(Munir 2007).


(23)

2.2. Algoritma Pengurutan ( Sorting )

Algoritma merupakan urutan aksi-aksi yang dinyatakan dengan jelas dan tidak rancu untuk memecahkan suatu masalah dalam rentang waktu tertentu. Sedangkan pengurutan adalah proses pengaturan sekumpulan objek berdasarkan urutan atau susunan tertentu, dapat berupa pengurutan menaik (ascending) atau menurun (descending). (Sharma at all 2008). Contoh, sebuah larik atau array terdiri dari kumpulan bilangan : [3,12,1,50,33,5,28]

 Hasil pengurutan menaik (ascending) : [1,3,5,12,28,33,50]  Hasil pengurutan menurun (descending) : [50,33,28,12,5,3,1]

Sebuah algoritma dikatakan baik jika menghasilkan nilai yang benar, efektif dan efisien. Efektif yaitu tepat sasaran, jelas dan tidak rancu dalam menjalankan aksi-aksinya serta menghasilkan data yang benar. Efisien yaitu penghematan proses dari sebuah algoritma, seperti running time dan penggunaan memori. Metode atau algoritma pengurutan dapat diklasifikasikan menjadi :

1. Metode atau algoritma pengurutan internal, yaitu pengurutan yang dilakukan di dalam larik itu sendiri. Datanya disimpan di dalam memori komputer.

2. Metode atau algoritma pengurutan eksternal, yaitu pengurutan yang datanya disimpan di dalam disk storage. Metode ini disebut juga pengurutan arsip.

Sedangkan berdasarkan kestabilan (stability), algoritma pengurutan dapat dibagi menjadi dua jenis, yaitu :

1. Metode pengurutan stabil (stable sorting algorithm), merupakan algoritma pengurutan yang menjaga/mempertahankan (maintenance) urutan dari beberapa elemen array yang bernilai sama.

2. Metode pengurutan tidak stabil (non stable sorting algorithm), merupakan metode pengurutan yang tidak menjaga/mempertahankan (maintenance) urutan dari beberapa elemen array yang bernilai sama. Dengan kata lain, urutan beberapa elemen yang sama berbeda antara sebelum dan sesudah pengurutan.


(24)

Algoritma memiliki dua skema, yaitu iteratif dan rekursif. Iteratif yaitu algoritma yang melakukan perulangan biasa, sedangkan rekursif adalah algoritma yang melakukan perulangan dengan melakukan pemanggilan terhadap dirinya sendiri. Contoh algoritma pengurutan yang termasuk dalam skema iteratif, yaitu pengurutan apung (bubble sort) dan selection sort, Contoh algoritma pengurutan yang termasuk dalam skema rekursif, yaitu pengurutan merge (merge sort), pengurutan heap (heap sort) dan pengurutan cepat (quick sort). Tidak semua algoritma tersebut hanya memiliki satu skema, misalnya algoritma pengurutan seleksi atau selection sort yang dapat menggunakan skema rekursif, namun di dalam penelitian ini selection sort yang dibahas menggunakan skema iteratif (Fanani 2008).

2.3. Kompleksitas Algoritma

Efisiensi sebuah algoritma tergantung dari beberapa hal, diantaranya adalah :  Kinerja CPU

 Kinerja Memori  Kinerja Disk  Kinerja Jaringan

Algoritma memiliki kompleksitas, kompleksitas merupakan acuan utama utama untuk mengetahui kecepatan dari sebuah algoritma. Kompleksitas dibagi menjadi tiga, yaitu (Rao and Ramesh 2012) :

1. Best case (Ω), yaitu kompleksitas algoritma dimana algoritma tersebut berjalan dalam kondisi terbaik.

2. Average case ( ), yaitu kompleksitas algoritma dimana algoritma tersebut berjalan dalam kondisi sedang, biasanya inputnya secara acak.

3. Worst case (Ο), yaitu kompleksitas algoritma dimana algoritma tersebut berjalan dalam kondisi terburuk.


(25)

2.4. Growth Function

Kinerja sebuah algoritma biasanya di ukur dengan mengacu pada kondisi terburuknya, yaitu worst case yang dilambangkan dengan notasi Big O. Notasi Big O adalah fungsi yang berkaitan dengan kelajuan proses dan kelajuan pertambahan data (Suryani 2013).

Tabel 2.1 Tabel Notasi Big O

Notasi Nama Contoh Aplikasi

O(1) Konstan Menentukan apakah suatu bilangan ganjil atau genap

O(log * n) Iterasi Logaritmik Algoritma pencarian Hopcraff dan Ullman untuk himpunan disjoint

O(log n) Logaritmik Pencarian dalam list terurut dengan Binary Search Algorithm

O((log n)c) Polilogaritmik Menentukan bilangan prima dengan AKS primality test

O(n) Linear Pencarian dalam list tidak terurut O(n log n) Linearitmik Mengurutkan list dengan Heapsort O(n2) Kuadratik Mengurutkan list dengan Insertion Sort

O(nc),c>1 Poliomial Pencarian shortest path dengan algoritma Floyd Warshall

O(cn) Eksponensia Pencarian solusi untuk traveling salesmen problem

O(n!) Faktorial Menyelesaikan traveling salesmen problem dengan menggunakan brute force

O(2cn) Dobel Eksponensial Pencarian himpunan lengkap dari AC-unifiers (associative-commutative unifiers)


(26)

2.5. Notasi Asimptotik

Notasi asimptotik digunakan untuk menentukan kompleksitas suatu algoritma dengan melihat waktu tempuh (running time) sebuah algoritma. Waktu tempuh algoritma

merupakan fungsi : N → R suatu algoritma dengan algoritma lainnya. Notasi asimptotik dapat dituliskan dengan beberapa simbol, yaitu :

 Notasi Big O, yaitu notasi asimptotik sebuah fungsi algoritma untuk batas atas.  Notasi Little o, yaitu notasi asimptotik sebuah fungsi algoritma untuk batas atas

namun tidak secara ketat terikat (not asymptotically tight).

 Notasi Theta ( ), yaitu notasi asimptotik sebuah fungsi algoritma untuk batas atas dan bawah.

 Notasi Omega ( ), yaitu notasi asimptotik sebuah fungsi algoritma untuk batas bawah, notasi ini berlawanan dengan notasi little-o.

2.6. Pengertian Selection Sort

Selection sort adalah mencari elemen yang tepat untuk diletakkan di posisi yang telah diketahui, dan meletakkannya di posisi tersebut setelah data tersebut ditemukan. Selection Sort Membandingkan elemen yang sekarang dengan elemen yang berikutnya sampai dengan elemen yang terakhir. Jika ditemukan elemen lain yang lebih kecil dari elemen sekarang maka dicatat posisinya dan kemudian ditukar(Swap) dan begitu seterusnya(Triono 2010). Dalam tesis ini penulis menambahkan 2 metode pengurutan data dengan selection sort yang baru, yaitu:

1. Selection Sort Model Insert 2. Selection Sort Model New List

Ide dasarnya adalah melakukan beberapa kali pass untuk melakukan penyeleksian elemen struktur data. Untuk sorting ascending (menaik), elemen yang paling kecil di antara elemen-elemen yang belum urut, disimpan indeksnya, kemudian dilakukan pertukaran nilai elemen dengan indeks yang disimpan tersebut dengan elemen yang paling depan yang belum urut. Sebaliknya, untuk sorting descending (menurun), elemen yang paling besar yang disimpan indeksnya kemudian ditukar.


(27)

Algoritma selection sort memilih elemen maksimum/minimum array, lalu menempatkan elemen maksimum/minimum itu pada awal atau akhir array (tergantung pada urutannya ascending /descending). Selanjutnya elemen tersebut tidak disertakan pada proses selanjutnya. Karena setiap kali selection sort harus membandingkan elemen-elemen data, algoritma ini termasuk dalam comparison-based sorting. Seperti pada algoritma Bubble Sort, proses memilih nilai maksimum / minimum dilakukan pada setiap pass. Jika array berukuran N, maka jumlah pass adalah N-1 (Nugroho 2005).

Terdapat pendekatan dalam metode pengurutan dengan Selection Sort :

1. Algoritma pengurutan maksimum (maximum selection sort), yaitu memilih elemen maksimum sebagai basis pengurutan.

2. Algoritma pengurutan minimum (minimum selection sort), yaitu memilih elemen minimum sebagai basis pengurutan

2.7. Pengertian Merge Sort

Metode pengurutan merge sort adalah metode pengurutan lanjut, sama dengan metode Quick Sort. Metode ini juga menggunakan konsep devide and conquer yang membagi data S dalam dua kelompok yaitu S1 dan S2 yang tidak beririsan (disjoint). Proses pembagian data dilakukan secara rekursif sampai data tidak dapat dibagi lagi atau dengan kata lain data dalam sub bagian menjadi tunggal. Setelah data tidak dapat dibagi lagi, proses penggabungan (merging) dilakukan antara sub-sub bagian dengan memperhatikan urutan data yang diinginkan (ascending/kecil ke besar atau descending/besar ke kecil). Proses penggabungan ini dilakukan sampai semua data tergabung dan terurut sesuai urutan yang diiginkan. Kompleksitas algoritma merge sort adalah O(n log n)( Fenwa at all 2012).

Secara umum, algoritma merge sort dapat diimplementasikan secara rekursif. Fungsi rekursif adalah sebuah fungsi yang didalam implementasinya memanggil dirinya sendiri. Pemanggilan diri sendiri ini berakhir jika kondisi tertentu terpenuhi (terminated condition is true). Pada contoh berikut ini, terminated condition dari proses rekursif mergesort akan berakhir jika data tidak dapat dibagi lagi (data tunggal telah diperoleh). Dengan kata lain, proses pembagian data dilakukan terus selama S.size > 1 (belum tunggal) ( Fenwa at all 2012).


(28)

Ide algoritma ini hampir mirip dengan QuickSort, yaitu melakukan partisi. Kecuali bahwa algoritma ini melakukan partisi tanpa kriteria. Jadi, data set (X[l] ... X[r]) di partisi langsung ke du sub data set dengan jumlah data yang sama (X[l] ... X[(l+r)/2], dan X[(l+r)/2+1] ... X[r]). Lalu secara rekursif melakukan Merge Sort untuk masing-masing data set. Karena kedua data set itu bisa overlapping (tidak seperti pada Quick Sort) maka setelah kedua sub data set terurut masih memerlukan proses penggabungan (Merging). Merging ini memerlukan ruang tambahan yaitu suatu array yang sama panjangnya dengan panjang kedua subset untuk menyimpan hasilnya (Bhalchandra dan Deshmukh 2010).

void MergeSort(int l,int r) {

if (l < r) {

MergeSort(l, (l+r)/2); MergeSort((l+r)/2,r); Merging();

} }

Algoritma ini memiliki kompleksitas O(n log n).

2.8. Struktur Data

Struktur data adalah cara menyimpan atau merepresentasikan data di dalam komputer agar bisa dipakai secara efisien. Sedangkan data adalah representasi dari fakta dunia nyata. Fakta atau keterangan tentang kenyataan yang disimpan, direkam atau direpresentasikan dalam bentuk tulisan, suara, gambar, sinyal atau simbol. Secara garis besar tipe data dapat dikategorikan menjadi :

1. Tipe data sederhana/dasar a. Tipe data sederhana tunggal

- Integer - Real


(29)

- Karakter

b. Tipe data sederhana majemuk misalnya string 2. Struktur data, meliputi :

a. Struktur data sederhana

- Array - Record

b. Struktur data majemuk, yang terdiri dari:

- Linier : Stack, Queue, List dan Multilist - No Linier : Pohon Biner (tree) dan Graph

Pemakaian struktur data yang tepat didalam proses pemrograman akan menghasilkan algoritma yang lebih jelas dan tepat, sehingga menjadikan program secara keseluruhan lebih efesien dan sederhana. Struktur data yang ′′standar′′ yang biasanya digunakan dibidang informatika adalah List, Multilist, Stack (Tumpukan), Queue (Antrian), Tree ( Pohon ), Graph ( Graf ). Struktur data yang penulisan bahas dalam tesis ini adalah struktur data sederhana yaitu array dan struktur data majemuk yaitu list ( Wahyudi 2004 ).

a. Array

Array (larik) adalah struktur data statik yang menyimpan sekumpulan elemen yang bertipe sama. Setiap elemen diakses langsung melalui indeksnya. Indeks Array (larik) harus tipe data yang menyatakan keterurutan misalnya integer atau karakter. Banyaknya elemen larik harus sudah diketahui sebelum program dieksekusi. Array merupakan suatu struktur data yang bersifat statis. Array harus dialokasikan terlebih dahulu di dalam memory sebelum kita memakainya.

b. List

Merupakan suatu struktur data pengembangan dari konsep ADT (Abstrak Data Type) yang bersifat dinamis. List dapat dimanfaatkan secara effektif sesuai dengan keperluan. List juga dapat benar – benar dihapus / dibersihkan dari memory. List sebenarnya merupakan suatu type data tersendiri. Di bahasa Visual Studio 2010 Ultimate, List bisa berupa suatu Class ataupun Record. Ciri – ciri utama dari List adalah, dia mempunyai minimal dua elemen utama. Elemen – elemen itu adalah data dan pointer untuk menunjukkan ke list berikutnya ( Sanjaya 2001).


(30)

Tabel 2.2 Perbedaan mendetail antara Array dan List

Array List

1.Pengaksesan bersifat Statis

2.volumenya selalu tetap tidak tergantung pada jumlah data

3.alokasi memori dilakukan pada saat array didefinisikan.

4.pembebasan memori dilakukan pada saat program berhenti.

5.Cara akses bersifat random dengan menggunakan nomor index.

1.Pengaksesan bersifat Dinamis

2.ukurannya berubah-ubah disesuaikan dengan kebutuhan.

3.alokasi memori ditentukan pada saat data baru dibuat.

4.pembebasan memori dilakukan setiap ada penghapusan data.

5.Cara akses ke masing-masing class data dilakukan secara linier (selalu dimulai dari elemen pertama).

(Sumber : Sanjaya, 2001 )

2.9. Penelitian Terdahulu

Penelitian yang dilakukan oleh Sareen (2013) yang berjudul Comparison of Sorting Algorithms (On the Basis of Average Case) dimana metode merge sort dan pengurutan lain menggunakan memori yang lebih efisien dan kompleksitas waktu terbaik dibandingkan metode selection sort dalam proses pengurutan data, maka dilakukan penelitian untuk menemukan sebuah algortima sorting yang dapat memberikan kompleksitas lebih baik lagi.

Penelitian yang dilakukan oleh Tjaru & Setia (2009) yang berjudul Kompleksitas Algoritma Pengurutan Selection Sort dan Insertion Sort, yang menerengakan bahwa algoritma pengurutan data dengan selection sort merupakan algoritma pengurutan paling baruk dari semua metode pengurutan yang ada, maka dengan itu penulisan menambahkan 2 metode pengurutan pengembangan dari metode selection sort yaitu selection sort model insert dan selection sort model new list untuk dilakukan perbandingan terhadap metode yang terbaik sebelumnya yaitu metode merge sort dan juga terhadap metode selection sort. Kedua metode yang penulis tambahkan tersebut dilakukan pengujian dengan menggunakan bahasa pemrograman Visual Studio 2010 Ultimate terhadap 10 sampai 100000 data dengan kelipatan 1000 data yang masing-masingnya bertipe integer.


(31)

BAB 3

METODOLOGI PENELITIAN

3.1. Algoritma Selection Sort

Algoritma pengurutan seleksi atau selection sort dibagi menjadi dua, yaitu :

1. Algoritma pengurutan seleksi minimum atau minimum selection sort Yaitu dengan mencari nilai terkecil dari array dan digunakan sebagai pembanding.

2. Algoritma pengurutan seleksi maksimum atau maximum selection sort Yaitu dengan mencari nilai terbesar dari array dan digunakan sebagai pembanding.

3.1.1. Pseudocode Minimum Selection Sort

Procedure MinSelectionSort(input/output A : Larik, input n : integer) DEKLARASI :

i, j : integer i min : integer temp : integer ALGORITMA : for I 1 to n-1 do

i min i

for j i+1 to n do if A[j] < A[i min]

then i min j endif

endfor temp A [i] A[i] A[i min] A[i min] temp endfor


(32)

3.1.2 Pseudocode Maximum Selection Sort

Procedure MaxSelectionSort(input/output L : Larik, input n : integer) DEKLARASI :

i, j : integer i maks : integer temp : integer DEFINISI :

for i n downto 2 do i maks 1 for j 2 to i do

if L[j] > L[i maks] then i maks j endif

endfor temp L[i] L[i] L[i maks] L[i maks] temp endfor

end procedure

Algoritma pengurutan seleksi (selection sort) adalah algoritma yang tidak stabil,karena urutan beberapa elemen yang sama berbeda antara sebelum dan sesudah pengurutan. Algoritma ini juga termasuk algoritma pengurutan internal, karena melakukan sorting di dalam array itu sendiri, dan menyimpan datanya di dalam memori komputer. Yang akan dibahas kali ini adalah menggunakan pengurutan seleksi minimum(minimum selection sort) secara menaik (ascending), yaitu selection sort dengan menggunakan nilai terkecil di dalam array sebagai pembanding.


(33)

3.1.3 Loop Invariant Minimum Selection Sort Statement

Saat awal algoritma dijalankan, nilai imin berisi indeks elemen terkecil dari larik A[1...j - 1].

Initialization

Sebelum iterasi atau pass pertama dilakukan, nilai j = i + 1, i min berisi indeks elemen terkecil dari larik A[i...i] yang merupakan indeks elemen paling pertama larik A.

Maintenance

Sebelum iterasi ke- jth, i min berisi indeks elemen terkecil dari larik A[i...j - 1]. Kemudian setelah dijalankan, jika A[j] < A[i min] maka imin bernilai sama dengan j dan menyimpan indeks terkecil larik A[i...j].

Termination

Sebelum iterasi ke- (n + 1) th, j = n + 1, i min berisi indeks terkecil dari elemen larik A[i...n].

3.2. Simulasi Algoritma Pengurutan Selection Sort

Contoh, kita memiliki sebuah larik (array) (A) yang memiliki 7 buah elemen. Lariktersebut akan diurutkan secara menaik (ascending) dengan mencari nilai minimum sebagai pembanding.

26 19 38 3 9 13 21

1 2 3 4 5 6 7

1. Pass 1

 Cari nilai elemen terkecil dari array (larik) A[1...7] dengan membandingkan antar nilai elemen array, didapatkan elemen terkecil A[4]= 3.

 Tukarkan dengan nilai elemen terujung (awal) yaitu A[1] Lalu elemen A[1] tersebut sudah terurut.

3 19 38 26 9 13 21


(34)

2. Pass 2

 Cari nilai elemen terkecil dari array (larik) A[2...7] dengan membandingkan antar nilai lemen array, didapatkan elemen terkecil A[5] = 9.

 Tukarkan dengan nilai elemen terujung (awal) yaitu A[2]. Lalu elemen A[2] tersebut udah terurut.

3 9 38 26 19 13 21

1 2 3 4 5 6 7

3. Pass 3

 Cari nilai elemen terkecil dari array (larik) A[3...7] dengan membandingkan antar nilai lemen array, didapatkan elemen terkecil A[6] = 13.

 Tukarkan dengan nilai elemen terujung (awal) yaitu A[3]. Lalu elemen A[3] tersebut udah terurut.

3 9 13 26 19 38 21

4. Pass 4

 Cari nilai elemen terkecil dari array (larik) A[4...7] dengan membandingkan antar nilai lemen array, didapatkan elemen terkecil A[5] = 19.

 Tukarkan dengan nilai elemen terujung (awal) yaitu A[4]. Lalu elemen A[4] tersebut udah terurut.

3 9 13 19 26 38 21

5. Pass 5

 Cari nilai elemen terkecil dari array (larik) A[5...7] dengan membandingkan antar nilai lemen array, didapatkan elemen terkecil A[7] = 21.

 Tukarkan dengan nilai elemen terujung (awal) yaitu A[5]. Lalu elemen A[5] tersebut udah terurut.

3 9 13 19 21 38 26

6. Pass 6(n-1)

 Cari nilai elemen terkecil dari array (larik) A[6...7] dengan membandingkan antar nilai lemen array, didapatkan elemen terkecil A[7] = 26.


(35)

 Tukarkan dengan nilai elemen terujung (awal) yaitu A[6]. Lalu elemen A[6] tersebut udah terurut.

3 9 13 19 21 26 38

Elemen yang tersisa yaitu elemen terakhir A[7] = 38. Elemen tersebut tidak perlu diurutkan karena elemen tersebut berada pada posisi yang sudah terurut. Jadi array atau larik A sudah terurut. Hasil array A yang sudah terurut yaitu :

3 9 13 19 21 26 38

3.3. Analisis dan Running Time Selection Sort

Running timealgoritma pengurutan seleksi (selectionsort) dapat dihitung dengan: Tabel 3.1. Running Time

Selection Sort Cost Times

for i 1 to n-1 do C1 n

i min i C2 n-1

for j i+1 to n do C3 ∑

if A[j] < A[i min] C4 ∑

then i min j C5 ∑

Endif 0 ∑

Endfor 0 ∑

temp A[i] C6 n-1

A[i] A[i min] C7 n-1

A[i min] temp C8 n-1


(36)

Keterangan :

 ti,j bernilai 1 jika kondisi if benar, 0 jika salah 

( )

dapat bernilai 1 atau 0.

 Ketika kondisi Best Case maka kondisi if salah, ti,j= 0. Kondisi best case terjadi jika data dalam elemen array sudah terurut.Maka :

( ) ( )

Didapatkan notasi asimptotik best case selection sort adalah T(n)=Ω( )

 Ketika kondisi worst case maka kondisi if benar, ti,j= 1. Kondisi worst case terjadi jika data dalam elemen array terurut secara terbalik, Maka:

( ) ( )

Didapatkan notasi asimptotik best case selection sort adalah T(n)=O( )

Jadi baik dalam kondisi worst case, average case maupun best case didapatkan kompleksitas waktu algoritma selection sort yaitu :T(n)=O( )

3.4. Selection Sort Model Inser ( Sisip )

Metode insert (sisip) dimana data paling kecil disisipkan ke elemen pertama (ascending) dan data paling kecil disisip ke elemen terakhir (descending). Contoh, kita memiliki sebuah larik (array) yang memiliki 7 buah elemen. Larik tersebut akan diurutkan secara menaik (ascending) dengan mencari nilai minimum sebagai pembanding.


(37)

3.4.1. Psedocode Selection sort Model insert

function SelectionSortInsert(arrayList data) for i = 1 to data.length

var int index

var int check = data[i]

/* get index of minimun data in array */ for j = i to data.length

if data[j] <= check index = j

check = data[j] end if

end for

var int temp = data[index]

/* to change index of array item from i to index */ for k = index down to i + 1

data[k] = data[k-1] end for

/* move minimum element*/ data[i] = temp

end for return data end function

3.4.2. Simulasi Algoritma Pengurutan Selection Sort Model Insert

Contoh, kita memiliki sebuah Array ( larik ) (A) yang memiliki 7 buah elemen. Array( larik ) tersebut akan diurutkan secara menaik (ascending) dengan mencari nilai minimum sebagai pembanding.

26 19 38 3 9 13 21

1 2 3 4 5 6 7

Pass 1: Pilih data terkecil dari array dan sisipkan ke elemen pertama

3 26 19 38 9 13 21

1 2 3 4 5 6 7

Pass 2: Pilih data terkecil dari array dan sisipkan ke elemen kedua

3 9 26 19 38 13 21

1 2 3 4 5 6 7


(38)

3 9 13 26 19 38 21

1 2 3 4 5 6 7

Pass 4 :Pilih data terkecil dari array dan sisipkan ke elemen ke empat

3 9 13 19 26 38 21

1 2 3 4 5 6 7

Pass 5 :Pilih data terkecil dari array dan sisipkan ke elemen ke lima

3 9 13 19 21 26 38

1 2 3 4 5 6 7

Selesai array dan terurut secara Ascending

3.5. Selection Sort Model New List (Dua List)

Pilih data terkecil dari list pertama dan buang dari list pertama, pindahkan ke list baru dan seterusnya. Contoh, kita memiliki sebuah list yang memiliki 7 buah elemen. List tersebut akan diurutkan secara menaik (ascending) dengan mencari nilai minimum sebagai pembanding.

3.5.1. Psedocode Selection sort with new list

function SelectionSortNewList(arrayList data) var arrayList temp

for i = 1 to data.length var int index

var int check = data[i]

/* get index of minimun data in array */ for j = 1 to data.length

if data[j] <= check index = j

check = data[j] end if

end for

/*add new item array to temporary array*/ temp.add(data(index))

/*remove item array with minimum data base on index*/

data.removeAt(index) end for

return temp end function


(39)

3.5.2. Simulasi Algoritma Pengurutan Selection Sort Model New List

Contoh, kita memiliki sebuah list (A) yang memiliki 7 buah elemen. List tersebut akan diurutkan secara menaik (ascending) dengan mencari nilai minimum sebagai pembanding

List Pertama New List

26 19 38 3 9 13 21

Pass 1 26 19 38 9 13 21 3

Pass 2 26 19 38 13 21 3 9

Pass 3 26 19 38 21 3 9 13

Pass 4 26 38 21 3 9 13 19

Pass 5 26 38 3 9 13 19 21

Pass 6 38 3 9 13 19 21 26

3 9 13 19 21 26 38

New List sudah terurut secara Ascending

3.6. Penjelasan Singakat Merge Sort

Algoritma merge sort dirancang untuk memenuhi kebutuhan pengurutan jika data yang diurutkan berjumlah banyak, dan tidak memungkinkan untuk ditampung dalam memori komputer. Cara kerja atau konsep dari algoritma merge sort adalah menggunakan metode rekursif dan teknik divide and conquer.

a. Rekurensi (Reccurence)

Merupakan sebuah fungsi atau prosedur yang digambarkan secara rekursif. Rekursif adalah proses untuk memanggil dirinya sendiri. Dan fungsi running timenya dapat digambarkan oleh recurrence (Rekurensi). Definisi rekursif disusun oleh dua bagian, yaitu :

1. Basis, yaitu bagian yang berisi kasus yang terdefinisi secara eksplisit dan berguna untuk menghentikan rekursif (memberikan sebuah nilai yang terdefinisi pada fungsi rekursif).

2. Rekurens, yaitu bagian yang mendefinisikan objek dalam terminologi dirinya sendiri.

Misalnya pada proses untuk menghitung faktorial dari n, maka:  Basis : n!=1 ,n=0


(40)

 Rekursi : n!=n x (n-1)! ,n>0 b. Divide and Conquer

1. Divide :Membagi sebuah array menjadi dua array, sebuah problem dipecah menjadi sub-sub problem yang memiliki kemiripan dengan masalah semula namun berukuran lebih kecil.

2. Conquer :Menyelesaikan masalah secara rekursif, yaitu mengurutkan setiap array.

3. Combine : Menggabungkan solusi yaitu dua array yang sudah terurut

3.6.1. Pseudocode Merge Sort

PROCEDURE MERGESORT(A, p, r) IF p < r // Check for base case

THEN q = FLOOR (p + r)/2 // Divide step

MERGESORT(A, p, q) // Conquer step.

MERGESORT(A, q + 1, r) // Conquer step.

MERGE(A,p, q, r) // Conquer step.

PROCEDURE MERGE(A, p, q, r) n1 ← q − p + 1

n2 ← r − q

Create arrays L[1 . . n1 + 1] and R[1 . . n2 + 1]

FOR i ← 1 TO n1

DO L[i] ← A[p + i − 1]

FORj ← 1 TO n2

DO R[j] ← A[q + j] L[n1 + 1] ← ∞

R[n2 + 1] ← ∞ i ← 1

j ← 1

FOR k ← p TO r

DO IF L[i] ≤ R[j] THEN A[k] ← L[i]


(41)

i ← i + 1 ELSE A[k] ← R[j]

j ← j + 1

3.6.2. Loop Invariant Pada Prosedure Merge Sort  Statement

Setiap iterasi pada for (pengulang) yang terakhir, sub-array A[p...k-1] berisi nilai k-p elemen terkecil dari array L dan R dalam keadaan yang sudah terurut. L[i] dan R[j] merupakan elemen terkecil dari array L dan R yang tidak dicopy ke array A.

 Initialization

Sebelum iterasipertama dilakukan, k = p. Sub-array A[p...k-1] berisi 0 elemen terkecil dari array L dan R. Ketika i = j = 1, L[i] dan R[j] adalah elemen terkecil dari array yang tidak di-copy ke array A. Kedua array L dan R dalam keadaan yang terurut

 Maintenance

Misalkan L[i] ≤ R[j], maka L[i] adalah elemen terkecil yang tidak di-copy ke array A. A[p...k-1] adalah k-p elemen terkecil, L[i] adalah (k–p+1)th elemen terkecil. Kemudian L[i] di-copy ke A[k], A[p...k] berisi k–p+1 elemen terkecil. Secara berulang, nilai k + i membuat perulangan (loop invariant). Jika L[i] > R[j], maka nilai R[j] di-copy ke array A[k], dan nilai j + 1 agar pengulangan dapat terus dilakukan.

 Termination

Ketika nilai k = r + 1, A[p...k -1] = A[p...r] berisi k-p elemen terkecil dalam keadaan yang terurut. Menghasilkan k-p = r + 1 -p elemen terkecil dalam keadaan yang erurut. Kedua array L dan R berisi n1 + n2 + 2 = r -p + 3 elemen, dan dua buah ∞ telah di-copy kembali ke array A.

3.7. Simulasi Algoritma Merge Sort

Contoh, kita memiliki sebuah larik (array) (A) yang memiliki 4 buah elemen. Larik tersebut akan diurutkan secara menaik (ascending). Dengan nilai p adalah indeks elemen awal, yaitu p = 0. Nilai r adalah indeks elemen akhir, yaitu r = 3.


(42)

1. MERGESORT(A, 0, 3)

 Kemudian diperiksa apakah jika p < r, (0 < 3), jika benar maka dihitung q = (p + r)/2 = 1.

 Kemudian dipanggil MERGESORT(A, 0, 1), MERGESORT(A, 2, 3) dan MERGE(A, 0, , 3)

1.1MERGESORT(A, 0, 1)

 Kemudian diperiksa apakah jika p < r, (0 < 1), jika benar maka dihitung q = (p + r)/2 = 0.

 Kemudian dipanggil MERGESORT(A, 0, 0), MERGESORT(A, 1, 1) dan MERGE(A, 0, 0, 1).

A[0…1]= 12 9

1.1.1. MERGESORT(A, 0, 0)

Kemudian diperiksa apakah jika p < r, (0 < 0), karena salah maka rekursif pada bagian ini selesai.

1.1.2. MERGESORT(A, 1, 1)

Kemudian diperiksa apakah jika p < r, (1 < 1), karena salah maka rekursif pada bagian ini selesai.

1.1.3. MERGE(A, 0, 0, 1)

 Sesuai dengan algoritma maka nilai :  n1 = q − p + 1= 1

 n2 = r –q= 1.

 Lalu buat dua buah array bernama L dan R dengan jumlah elemen  L[1 . . n1 + 1] yaitu L[1...2]

 R[1 . . n2 + 1] yaitu R[1...2]  Perulangan pada

 FOR i ← 1 TO n1 DO L[i] ← A[p + i − 1]  nilai L[1] = A[0]= 12:

L[1]= 12  Perulangan pada:


(43)

DO R[j] ← A[q + j]  nilai R[1] = A[1]= 9. R[1]= 9

 Kemudian ditambahkan L[n1 + 1] ← ∞ dan R[n2 + 1] ← ∞, sehingga

L[2] = ∞ dan R[2] = ∞. Sehingga array L dan Rberisi :

Array[1]= 12 ∞ dan array R= 9 ∞

Kedua array tersebut sudah dalam keadaan terurut.

 Nilai i dan j di inisialisasi menjadi i = 1 dan j = 1. Kemudian lakukan pengulangan pada :

 FOR k ← p TO r

DO IF L[i] ≤ R[j]

THEN A[k] ← L[i] i ← i + 1 ELSE A[k] ← R[j]

j ← j + 1

 Untuk menggabungkan array L dan R ke array A dalam keadaan terurut.

 Didapatkan :

o L[1] ≤ R[1], 12 ≤9 = False, maka A[0]= R[1]= 9

o L[1] ≤ R[2], 12 ≤∞= True, maka A[1]= L[1]= 12

A[0…1]= 9 12

1.2.MERGESORT(A, 2, 3)

 Kemudian diperiksa apakah jika p < r, (2 < 3), jika benar maka dihitung q = (p + )/2 = 2.

 Kemudian dipanggil MERGESORT(A, 2, 2), MERGESORT(A, 3, 3) dan MERGE(A, 2, 2, 3).

A[2…3]= 24 2


(44)

Kemudian diperiksa apakah jika p < r, (2< 2), karena salah maka rekursif pada bagian ini selesai.

1.2.2. MERGESORT(A, 3, 3)

Kemudian diperiksa apakah jika p < r, (3< 3), karena salah maka rekursif pada bagian ini selesai.

1.2.3. MERGE(A, 2, 2, 3)

 Sesuai dengan algoritma maka nilai:  n1 = q − p + 1= 1

 n2 = r –q= 1.

 Lalu buat dua buah array bernama L dan R dengan jumlah elemen  L[1 . . n1 + 1] yaitu L[1...2]

 R[1 . . n2 + 1]yaitu R[1...2]  Perulangan pada:

 FOR i ← 1 TO n1 DO L[i] ← A[p + i − 1]  nilai L[1] = A[2] = 24 L[1]= 24

 Perulangan pada:  FOR j ← 1 TO n2

DO R[j] ← A[q +j]  nilai R[1] = A[3] = 2 R[1]= 2

 Kemudian ditambahkan L[n1 + 1] ← ∞ dan R[n2 + 1] ← ∞, sehingga L[2] = ∞ dan R[2] = ∞. Sehingga array L dan R berisi :

Array L= 24 ∞ dan array R= 2 ∞

Kedua array tersebut sudah dalam keadaan terurut.

 Nilai i dan jadi inisialisasi menjadi i= 1 dan j= 1. Kemudian lakukan pengulangan pada :


(45)

DO IF L[i] ≤ R[j]

THEN A[k] ← L[i] i ← i + 1 ELSE A[k] ← R[j]

j ← j + 1

 Untuk menggabungkan array L dan R ke array A dalam keadaan terurut.

 Didapatkan :

o L[1] ≤ R[1], 24≤2= False, maka A[2] = R[1]= 2

o L[1] ≤ R[2], 24≤∞= True, maka A[3] = L[1]= 24

A[2…3]= 2 24

1.3. MERGE(A, 0, 1, 3)

 Sesuai dengan algoritma maka nilai :  n1 = q − p + 1= 2

 n2 = r – q= 2

 Lalu buat dua buah array bernama L dan R dengan jumlah elemen  L[1 . . n1 + 1] yaitu L[1...3]

 R[1 . . n2 + 1] yaitu R[1...3]  Perulangan pada:

 FOR i ← 1 TO n1 DO L[i] ← A[p + i − 1]

 nilai L[1] = A[0] = 9 dan L[2] = A[1] = 12.

A[1…2]= 9 12

 Perulangan pada:  FOR j ← 1 TO n2

DO R[j] ← A[p + j]

 Nilai R[1] = A[2] = 2 dan R[2] = A[3] = 24.


(46)

 Kemudian ditambahkan L[n1 + 1] ← ∞ dan R[n2 + 1] ← ∞, sehingga L[2] = ∞ dan R[2] = ∞. Sehingga array L dan R berisi :

Array L= 9 12 ∞ dan array R= 2 24 ∞

Kedua array tersebut sudah dalam keadaan terurut.

 Nilai i dan jadi inisialisasi menjadi i= 1 dan j= 1. Kemudian lakukan pengulangan pada :

 FOR k ← p TO r

DO IF L[i] ≤ R[j]

THEN A[k] ← L[i] i ← i + 1 ELSE A[k] ← R[j]

j ← j + 1

 Untuk menggabungkan array L dan R ke array A dalam keadaan terurut.

 Didapatkan :

o L[1] ≤ R[1],9≤2 = False, maka A[0]= R[1]= 2 o L[1] ≤ R[2], 9≤24= True, maka A[1]= L[1]= 9. o L[2] ≤ R[2], 12≤24= True, maka A[2]= L[2]= 12 o L[3] ≤ R[2], ∞≤24= False, maka A[3]= R[2]= 24


(47)

Jika digambarkan secara sederhana maka proses eksekusi algoritma merge sort adalah :

Array unsorted A[0…3] 12 9 24 2

devide to sub-array

A[0…1] 12 9 24 2 A[2…3]

devideto sub-array L&R

devide to Sub-array L&R

12 9 24 2

L[ ] merge & sort sub-array L&R

to array A

R[ ] L[ ] merge & sort

sub-array L&R to array A

R[ ]

9 12 2 24 A[2…3]

Merge & sort sub- array to array A

Sorted Array A[0…3] 2 9 12 24

Hasil pengurutannya adalah array A dengan elemen seperti dibawah:

A[0…3]= 2 9 12 24

3.8. Analisis Dan Running Time Merge Sort

Merge sort selalu membagi setiap array menjadi dua sub-array hingga mencapai basis, sehingga kompleksitas dari algoritma merge sort, berlaku untuk semua kasus (Worst Case = Best Case = Average Case).

 Untuk memudahkan, kita anggap jumlah elemen array(n) adalah kelipatan 2, jadi setiap dilakukan divide (pemecahan menjadi dua sub-array), kedua sub-array akan berukuran n/2.

 Basis : untuk n = 1, maka array tersebut sudah terurut dengan sendirinya.

 Rekurens : untuk n> 1, maka akan dilakukan langkah-langkah merge sort, yaitu:  Divide : Hitung nilai q yang merupakan rata-rata dari p + r, yang bernilai θ(1).


(48)

 Conquer : Secara rekursif menyelesaikan 2 sub-array, setiap sub-array berukuran n/2, maka bernilai 2T(n/2)

 Combine : Menggabungkan element dari sub-array ke dalam array dengan prosedur

MERGE, bernilai θ(n).

 Jumlahkan semua fungsi yang dihasilkan, sehingga dihasilkan rekurens : {

}

 Dari rekurens tersebut di ubah untuk mendapatkan kompleksitas waktu algoritma merge sort, sehingga T(n)=O(n log n)

Catatan : log2n = 2log n

 Kompleksitas waktu tersebut dapat dijelaskan dari recursif tree berikut :

 Array awal (cn), yang memiliki dua sub-array, masing-masing bernilai T(n/2): cn

T(n/2) T(n/2)

 Kemudian sub-array tersebut di bagi lagi menjadi dua sub-sub-array, jadi bernilai T(n/4) dan seterusya.

cn

cn/2 cn/2

T(n/4) T(n/4) T(n/4) T(n/4)

 Di dapatkan tinggi pohon rekursif adalah log n, dan memiliki sebanyak log n+ 1 level. Setiap level bernilai cn, sehingga cn log n+ cn.

 Koefisien tidak perlu dimasukkan, sehingga kompleksitas waktunya menjadi: T(n)= O(n log n)


(49)

BAB 4

HASIL DAN PEMBAHASAN 4.1. Pendahuluan

Aplikasi ini dibangun dengan menggunakan aplikasi pemrograman Visual Studio 2010. Adapun uji coba yang dilakukan menggunakan komputer dengan spesifikasi hardware dan software sebagai berikut :

1. Prosesor Core i7 2 GHz 2. RAM, 2 GB

3. Aplikasi Visual Studio 2010 4. OS Win 7 ultimate

4.2. Hasil Uji Coba

Pada penelitian ini dilakukan pengamatan pada 4 metode pengurutan yaitu selection sort, selection model insert, selection sort model new list dan merge sort. Diberikan nilai input Max Item Value 1000 dan 1000000, sedangkan nilai Max Item pada 10, 500 dan 1000 untuk masing-masing Max Item Value tersebut. Dan data yang diberikan untuk keempat kondisi tersebut juga sama. Berikut akan ditampilkan hasil pengamatan yang sudahdilakukan.

4.2.1 Pengurutan pada Max Item = 10

Pengurutan pada Max Item 10 dilakukan dengan membandingkan pada 2 nilai Max Item Value yaitu Max Item Value = 1000 dan 1000000.


(50)

Gambar 4.1 Item Tampilan hasil pada max item 10 dan Max Value 1000

a. Max Item Value = 1000

Pada kondisi max item 10 dan Max Item Value 1000 terlihat hasil pengurutan data seperti gambar 4.2. Dari keempat metode yang digunakan dapat diamati bahwa pada kondisi ini waktu eksekusi yang paling cepat yaitu pada metode selection sort sebesar 0,0505 x 10-3 sec, selection model insert sebesar 0,0642x 10-3 sec, selanjutnya selection sort new list sebesar 0,0647 x 10-3 sec dan merge sort sebesar 0,0768 x 10-3 sec. Dari keempat nilai eksekusi tersebut metode marge sort memiliki waktu eksekusi yang paling lama untuk kondisi max item 10. Dari hasil ini terlihat bahwa metode selection sort cukup baik dalam melakukan sorting dibandingkan merge sort.


(51)

a.Selection Sort b Selection Sort Model Insert

b.

Selection sort d. Merge Sort

Gambar 4.2 Pengurutan pada Max Item 10 Max Item Value = 1000

Pada gambar 4.3 jelas telihat perbedaan kompleksitas waktu dari keempat metode sorting yang ditampilakan pada grafik, yang menujukan waktu terbaik pada selection sort dan terburuk ada pada merge sort.


(52)

Gambar 4.3 Grafik perbandingan keempat pengurutan untuk Max Item 10 Max Item Value = 1000

b. Max Item Value = 1000000

Pengurutan pada Max Item 10 dilakukan denganMax Item Value yaitu Max Item Value = 1000000.


(53)

Pada kondisi Max item 10 dan Max Item Value 1000000 dengan data yang diberikan pada keempat kondisi sama maka diperoleh hasil pengurutan seperti pada gambar 4.5. Pada kondisi ini waktu eksekusi tercepat pada metode selection sort sebesar 0,0611 x 10-3 sec, selanjutnya metode selection model insert sebesar 0,0650 x 10-3 sec, merge sort sebesar 0,0674 x 10-3 sec, metode selection sort model new list 0,0931 x 10-3 sec. Pada kondisi ini metode selection sort model new list memerlukan waktu paling lama untuk eksekusi bila dibandingkan dengan ketiga metode lainnya. Dari hasil ini terlihat bahwa tidak ada perbedaan yang signifikan antar keempat algoritma yang digunakan.

a. Selection sort b. Selection sort model insert


(54)

Gambar 4.5 Hasil pengurutan pada Max item 10 dan Max Item Value 1000000

Grafik pada gambar 4.6 menunjukan perbedaan kompleksitas waktu untuk keempat metode pengurutan tidak begitu signifikan, namun selection sort pada percobaan ini lebih unggul dari ketiga pengurutan lainnya.

Gambar 4.6. Grafik perbandingan keempat pengurutan untuk Max Item 10 Max Item Value = 1000000

4.2.2 Pengurutanpada Max Item = 500

Pengurutan pada Max Item 500 dilakukan dengan membandingkan pada 2 nilai Max Item Value yaitu Max Item Value = 1000 dan 1000000.


(55)

Gambar 4.7 Pengurutan Pada Max Item 500 Max Item Value=1000

a. Max Item Value = 1000

Pada kondisi Max item 500 dan Max Item Value 1000 dengan data yang diberikan pada keempat kondisi sama maka diperoleh hasil pengurutan seperti pada gambar 4.8. Pada kondisi ini waktu eksekusi tercepat pada metode merge sort sebesar 1,495 x 10-3 sec, selanjutnya selection sort new list 1,777x 10-3 sec, metode selection model insert sebesar 1,876 x 10-3 sec dan selection sort sebesar 1,975 x 10-3 sec. Pada kondisi ini metode selection sort memerlukan waktu paling lama untuk eksekusi bila dibandingkan dengan ketiga metode lainnya.


(56)

a. Selection sort b. Selection sort model insert

c. Selection sort New List d. Merge Sort. Gambar 4.8 Hasil pengurutan pada Max item 500 dan

Max Item Value 1000

Percobaan ini memperlihatkan dominasi dari merge sort jauh lebih unggul kompleksitas waktu dari selection sort, terlihat pada grafik pada gambar 4.9. Namun selection sort model insert dan selection sort model new list yang penulis tambahkan memliki waktu yang tidak signifikan dengan merge sort.


(57)

Gambar 4.9 Grafik perbandingan keempat pengurutan untuk Max Item 500 Max Item Value = 1000

b. Max Item Value = 1000000

Pengurutan pada Max Item 500 dilakukan dengan Max Item Value yaitu Max Item Value = 1000000.

Gambar 4.10 Pengurutan Pada Max Item 500 Max Item Value=1000000

Pada kondisi Max item 500 dan Max Item Value 1000000 dengan data yang diberikan pada keempat kondisi sama maka diperoleh hasil pengurutan seperti pada


(58)

gambar 4.11. Pada kondisi ini waktu eksekusi tercepat pada metode merge sort sebesar 1,773 x 10-3 sec, selanjutnya selection sort model insert 1,799 x 10-3 sec, metode selection model new list sebesar 1,893 x 10-3 sec dan selection sort sebesar 2,005 x 10-3 sec. Pada kondisi ini metode selection sort memerlukan waktu paling lama untuk eksekusi bila dibandingkan dengan ketiga metode lainnya.

a. Selection sort b. Selection sort model insert

c. Selection sort New List d. Merge Sort Gambar 4.11 Hasil pengurutan pada Max item 500 dan


(59)

Metode pengurutan yang penulis kembangkan dari motode selection sort, memiliki waktu yang lebih baik dari selection sort yaitu selection sort model insert dan selection sort model new list, sehingga perbedaan kompleksitas waktu dengan merge sort tidak terlalu signifikan, bila dibandingan merge sort dengan selection sort yang begitu jauh perbedaan kompleksitas waktunya, dapat dilihat pada grafik dibawah ini.

Gambar 4.12 Grafik perbandingan keempat pengurutan untuk Max Item 500 Max Item Value = 1000000

4.2.3 Pengurutanpada Max Item = 1000

Pengurutan pada Max Item 1000 dilakukan dengan membandingkan pada 2 nilai Max Item Value yaitu Max Item Value = 1000 dan 1000000.


(60)

Gambar 4.13 Pengurutan Pada Max Item 1000 Max Item Value=1000 a. Max Item Value = 1000

Pada kondisi Max item 1000 dan Max Item Value 1000 dengan data yang diberikan pada keempat kondisi sama maka diperoleh hasil pengurutan seperti pada gambar 4.14. Pada kondisi ini waktu eksekusi tercepat pada metode merge sort sebesar 3,323 x 10-3 sec, metode selection model new list sebesar 3,528 x 10-3 sec, selanjutnya selection sort model insert 3,679 x 10-3 sec dan selection sort sebesar 3,704 x 10-3 sec. Pada kondisi ini metode selection sort memerlukan waktu paling lama untuk eksekusi bila dibandingkan dengan ketiga metode lainnya. Terlihat bahwa metode merge sort membutuhkan waktu semakin cepat dibandingkan dengan metode lain dengan kondisi jumlah data yang semakin besar. Perbedaan yang dihasilkan lebih dari 1 second dengan metode lainnya. Sedangkan untuk metode selection sort, dari hasil terlihat bahwa dengan jumlah data yang semakin besar, waktu yang dibutuhkan metode ini juga semakin besar dibandingkan metode lainnya.


(61)

a. Selection sort b. Selection sort model insert

c. Selection sort New List d. Merge Sort

Gambar 4.14 Hasil pengurutan pada Max item 1000 dan Max Item Value 1000

Kecepatan kompleksitas waktu yang diciptakan merge sort selalu lebih baik dibandingkan dengan ketiga pengurutan lainnya jika max item dan max item valuenya bernilai besar. Perbedaan kompleksitas waktu telihat pada grafik dibawah ini.


(62)

Gambar 4.15 Grafik perbandingan keempat pengurutan untuk Max Item 1000 Max Item Value = 1000

b. Max Item Value = 1000000

Pengurutan pada Max Item 1000 dilakukan dengan Max Item Value yaitu Max Item Value = 1000000.


(63)

Gambar 4.16 Pengurutan Pada Max Item 1000 Max Item Value=1000000

Pengurutan pada Max Item = 1000 dilakukan untuk data dengan Max Item Value 100000. Sedangkan data yang diberikan kepada masing-masing kondisi adalah data yang bentuk dan jumlahnya sama. Gambar 4.17. Merupakan hasil uji coba pada kondisi ini. Pada kondisi ini waktu eksekusi tercepat pada metode merge sort sebesar 2,660 x 10-3 sec, selanjutnya selection sort new list 3,510 x 10-3 sec, metode selection model insert sebesar 3,652 x 10-3 sec dan selection sort sebesar 3,909 x 10-3 sec. Pada kondisi ini metode selection sort memerlukan waktu paling lama untuk eksekusi bila dibandingkan dengan ketiga metode lainnya. Dengan Max Item Value yang semakin besar, metode merge sort masih lebih baik dibandingkan dengan metode lainnya. Dari hasil ini juga terlihat bahwa, dengan jumlah data yang semakin besar, metode selection sort membutuhkan waktu yang semakin besar dibandingkan dengan metode lain.


(64)

a. Selection sort b. Selection sort model insert

c. Selection sort New List d. Merge Sort

Gambar 4.17 Hasil pengurutan pada Max item 1000 dan Max Item Value 1000000


(65)

Metode selection sort model insert dan selection sort model new list selalu lebih baik dari selection sort. Pada grafik jelas telihat keunggulan 2 pengurutan yang penulis tambahakan dengan max item 1000 dan max value 1000000.

Gambar 4.18 Grafik perbandingan keempat pengurutan untuk Max Item 1000 Max Item Value = 1000000

4.3. Pembahasan

Pada bagian ini akan dibahas hasil uji coba yang telah dilakukan. Untuk uji coba dengan Max Item 10 dengan Max Item Value 1000 dan 1000000, tidak terlihat perbedaan yang begitu signifikan antara keempat algoritma yang digunakan. Meskipun metode selection sort memiliki waktu eksekusi yang lebih baik tetapi perbedaan tersebut berkisar 0.01 detik. Sehingga perbedaan itu tidak terlalu berpengaruh karena jumlah data yang digunakan masih kecil.

Pada pengujian Max Item 500 dengan Max Item Value 1000 dan 1000000, perbedaan waktu eksekusi sudah mulai terlihat antara keempat algoritma yang diujikan. Perbedaan waktu eksekusi yang dihasilkan dalam pengujian yang dilakukan lebih dari 2 detik antara metode selection sort dengan ketiga metode lainnya. Begitu juga dengan Max Item Value 1000 menghasilkan perbedaan waktu eksekusi lebihdari 2 detik antara metode selection sort dengan ketiga metode lainnya. Merge sort menjadi metode yang paling cepat. Yang akan di bahasa pada bagian ini adalah perbedaan yang dihasilkan antara metode selection sort dengan selection sort model insert dan selection sort model new list. Metode selection sort menggunakan array sedangkan selection sort model insert dan selection sort model new list menggunakan list.


(1)

Lampiran : Listing Program

Imports System.ComponentModel Imports DevExpress.Skins Imports DevExpress.LookAndFeel Imports DevExpress.UserSkins Imports DevExpress.XtraEditors Imports DevExpress.XtraSplashScreen

Public Class Form1 Dim maxVal = 1000000 Dim maxItem = 1000000

Dim SelectionTime As Integer = 0 Dim SelectionInsertTime As Integer = 0

Dim SelectionNewTime As Integer = 0

Dim MergeTime As Integer = 0 Dim log As New

PrintLogResult(AddressOf PrintResult) Dim Imerge As Integer = 1

Dim userData As New ArrayList Sub New()

InitSkins()

InitializeComponent() Title.Location = New

Point((Me.Width / 2) - (Title.Width / 2), Title.Location.Y)

ChartExeTime.Location = New Point((Me.Width / 2) -

(ChartExeTime.Width / 2), ChartExeTime.Location.Y) End Sub

Sub InitSkins()

DevExpress.Skins.SkinManager.EnableFor mSkins()

DevExpress.UserSkins.BonusSkins.Regist er()

UserLookAndFeel.Default.SetSkinStyle(" Office 2013")

Me.WindowState = FormWindowState.Maximized End Sub

Public Sub SelectionSort(ByVal array As ArrayList)

Dim sWatch As New Stopwatch Dim result As String = ""

SplashScreenManager.Default.SetWaitFor mDescription("Selection sort process")

result += "Value = " & PrintArray(array) & vbNewLine sWatch.Start()

'Prosess Selection Sort For i As Integer = 0 To array.Count - 1

SplashScreenManager.Default.SetWaitFor mDescription("Selection sort step " & i + 1)

Dim index = GetIndexMinData(array, i) Dim temp = array(i) array(i) = array(index) array(index) = temp Next

sWatch.Stop() SelectionTime =

sWatch.Elapsed.TotalMilliseconds

SplashScreenManager.Default.SetWaitFor mDescription("Print result")

result = "Execution Time : " & sWatch.Elapsed.ToString & vbNewLine & vbNewLine & result

result += vbNewLine & vbNewLine & "Sorting Array = " & PrintArray(array)

Me.Invoke(log,

txtResultSelection, result, 1) End Sub

Public Function

GetIndexMinData(ByVal array As

ArrayList, ByVal start As Integer) As Integer

Dim index As Integer Dim check As Integer = array(start)

For i As Integer = start To Array.Count - 1

If array(i) <= check Then index = i

check = array(i) End If

Next

Return index End Function Public Sub

SelectionSortInsert(ByVal array As ArrayList)


(2)

Dim result As String = "" Dim sWatch As New Stopwatch

SplashScreenManager.Default.SetWaitFor mDescription("Selection sort insert process")

result += "Value = " & PrintArray(array) & vbNewLine sWatch.Start()

'Prosess Selection Sort Insert For i As Integer = 0 To array.Count - 1

SplashScreenManager.Default.SetWaitFor mDescription("Selection sort insert step " & i + 1)

Dim index = GetIndexMinData(array, i)

Dim temp = array(index) For j = index To i + 1 Step -1

array(j) = array(j - 1)

Next

array(i) = temp Next

sWatch.Stop()

SelectionInsertTime = sWatch.Elapsed.TotalMilliseconds

SplashScreenManager.Default.SetWaitFor mDescription("Print result")

result = "Execution Time : " & sWatch.Elapsed.ToString & vbNewLine & vbNewLine + result

result += vbNewLine & vbNewLine & "Sorting Array = " & PrintArray(array)

Me.Invoke(log,

txtResultSelectionInsert, result, 2) End Sub

Public Sub

SelectionSortNewList(ByVal array As ArrayList)

Dim temp As New ArrayList Dim result As String = "" Dim sWatch As New Stopwatch

SplashScreenManager.Default.SetWaitFor mDescription("Selection sort new list process")

result += "Value = " & PrintArray(array) & vbNewLine sWatch.Start()

'Prosess Selection Sort New List

For i As Integer = 0 To array.Count - 1

SplashScreenManager.Default.SetWaitFor mDescription("Selection sort new list step " & i + 1)

Dim index = GetIndexMinData(array, 0)

temp.Add(array(index)) array.RemoveAt(index) Next

sWatch.Stop() SelectionNewTime = sWatch.Elapsed.TotalMilliseconds

SplashScreenManager.Default.SetWaitFor mDescription("Print result")

result = "Execution Time : " & sWatch.Elapsed.ToString & vbNewLine & vbNewLine + result

result += vbNewLine & vbNewLine & "Sorting Array = " & PrintArray(temp)

Me.Invoke(log, txtResultNewList, result, 3) End Sub

Public Function MergeSort(ByVal array As ArrayList) As ArrayList 'if list size is 0 (empty) or 1, consider it sorted and return it '(using less than or equal prevents infinite recursion for a zero length m)

If array.Count <= 1 Then

SplashScreenManager.Default.SetWaitFor mDescription("Merge sort step " & Imerge)

Imerge += 1 Return array End If

'else list size is > 1, so split the list into two sublists '1. DIVIDE Part...

Dim left As New ArrayList Dim right As New ArrayList Dim midle As Integer = array.Count / 2

For i As Integer = 0 To midle - 1

left.Add(array(i)) Next


(3)

For i As Integer = midle To array.Count - 1

right.Add(array(i)) Next

'recursively call merge_sort() to further split each sublist

'until sublist size is 1 left = MergeSort(left) right = MergeSort(right) 'merge the sublists returned from prior calls to merge_sort() 'and return the resulting merged sublist

'2. CONQUER Part...

Return Merge(left, right) End Function

Public Function Merge(ByVal left As ArrayList, ByVal right As

ArrayList) As ArrayList

Dim result As New ArrayList While left.Count > 0 Or right.Count > 0

If left.Count > 0 And right.Count > 0 Then

If left(0) <= right(0) Then

result.Add(left(0))

left.RemoveAt(0) Else

result.Add(right(0))

right.RemoveAt(0) End If

ElseIf left.Count > 0 Then result.Add(left(0)) left.RemoveAt(0) ElseIf right.Count > 0 Then

result.Add(right(0)) right.RemoveAt(0) End If

End While Return result End Function

Public Sub MergeSortAlgo(ByVal array As ArrayList)

Dim sWatch As New Stopwatch Dim result As String = ""

SplashScreenManager.Default.SetWaitFor mDescription("Merge sort process") result += "Value = " & PrintArray(array) & vbNewLine

sWatch.Start()

array = MergeSort(array) sWatch.Stop()

MergeTime =

sWatch.Elapsed.TotalMilliseconds

SplashScreenManager.Default.SetWaitFor mDescription("Print result")

result = "Execution Time : " & sWatch.Elapsed.ToString & vbNewLine & vbNewLine + result

result += vbNewLine & vbNewLine & "Sorting Array = " & PrintArray(array)

Me.Invoke(log, txtMergeSort, result, 4)

End Sub

Private Sub StartProcess()

UserLookAndFeel.Default.SetSkinStyle(" Office 2013")

SplashScreenManager.ShowForm(Me, GetType(WaitForm1), True, True, False) maxItem =

CInt(txtMaxItem.Text) maxVal = CInt(txtMaxValue.Text)

If chkRandom.Checked = True Then

userData =

General.GenerateArrayData(maxItem, maxVal)

End If

Dim dataNew As New ArrayList Dim dataMerge As New ArrayList Dim dataInsert As New

ArrayList

For Each i In userData dataNew.Add(i) dataMerge.Add(i) dataInsert.Add(i) Next

DeleteSeries()

SelectionSort(userData)

SelectionSortInsert(dataInsert) SelectionSortNewList(dataNew) MergeSortAlgo(dataMerge)

SplashScreenManager.CloseForm(False) End Sub

Private Sub


(4)

System.Object, e As System.EventArgs) Handles btnProcess.Click

If chkRandom.Checked = False Then

userData =

General.StringToArray(txtUserData.Text , CInt(txtMaxItem.Text),

CInt(txtMaxValue.Text))

If userData.Count <= 0 Then

Return End If Else If Not

IsNumeric(txtMaxItem.Text) Then

MsgBox("Max Item can't be empty and must a integer",

MsgBoxStyle.Critical, "Error") Return

Else If

CInt(txtMaxItem.Text > 1000000) Then MsgBox("Max Item more than 1000000",

MsgBoxStyle.Critical, "Error") Return End If End If If Not

IsNumeric(txtMaxValue.Text) Then MsgBox("Max Item Value can't be empty and must a integer", MsgBoxStyle.Critical, "Error") Return

Else If

CInt(txtMaxValue.Text > 1000000) Then MsgBox("Max Value more than 1000000",

MsgBoxStyle.Critical, "Error") Return End If End If End If

txtResultSelection.Text = "" txtResultSelectionInsert.Text = ""

txtResultNewList.Text = "" txtMergeSort.Text = "" Dim process As New

Threading.Thread(Sub() StartProcess()) process.Start()

Imerge = 1 End Sub

Private Sub DrawGrafik(ByVal seriesNo As Integer)

If seriesNo = 1 Then

ChartExeTime.Series(0).Points.Add(New DevExpress.XtraCharts.SeriesPoint("Sel ection Sort", SelectionTime))

ElseIf seriesNo = 2 Then

ChartExeTime.Series(1).Points.Add(New DevExpress.XtraCharts.SeriesPoint("Sel ection Sort Model Insert",

SelectionInsertTime))

ElseIf seriesNo = 3 Then

ChartExeTime.Series(2).Points.Add(New DevExpress.XtraCharts.SeriesPoint("Sel ection Sort Model New List",

SelectionNewTime))

ElseIf seriesNo = 4 Then

ChartExeTime.Series(3).Points.Add(New DevExpress.XtraCharts.SeriesPoint("Mer ge Sort", MergeTime))

End If End Sub

Private Function PrintArray(ByVal array As ArrayList) As String

Dim result As String = "" For Each i In array result += i & ", " Next

Return result End Function

Private Sub DeleteSeries()

ChartExeTime.Series(0).Points.RemoveRa nge(0, 1)

ChartExeTime.Series(1).Points.RemoveRa nge(0, 1)

ChartExeTime.Series(2).Points.RemoveRa nge(0, 1)

ChartExeTime.Series(3).Points.RemoveRa nge(0, 1)

End Sub

Private Sub PrintResult(ByVal editor As

DevExpress.XtraEditors.MemoEdit, ByVal result As String, ByVal seriesNo As Integer)

editor.Text = result DrawGrafik(seriesNo) End Sub


(5)

Delegate Sub PrintLogResult(ByVal editor As

DevExpress.XtraEditors.MemoEdit, ByVal result As String, ByVal seriesNo As Integer)

Private Sub

chkRandom_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkRandom.CheckedChanged If chkRandom.Checked = True Then

txtUserData.Enabled = False

Else

txtUserData.Enabled = True End If

End Sub End Class


(6)