PENGURUTAN DATA 2.1 Definisi Pengurutan 2.2 Metode-metode Pengurutan

dokumen-dokumen yang mirip
Kuliah ke : 4 Algoritma & Stuktur Data. Pengurutan (Sorting)

Pengurutan (Sorting) Keuntungan Data Terurut. Pengurutan Terbagi Dua Kelompok:

DATA SORTING. Altien Jonathan Rindengan, S.Si, M.Kom

MODUL IV PENCARIAN DAN PENGURUTAN

Yaitu proses pengaturan sekumpulan objek menurut urutan atau susunan tertentu Acuan pengurutan dibedakan menjadi :

Pengurutan (Sorting) Algoritma Pemrograman

PENGURUTAN (SORTING) 1. Introduction 2. Bubble Sort 3. Selection Sort 4. Insertion Sort

BAB V SORTING (PENGURUTAN) INTERNAL

SORTING. Struktur Data S1 Sistem Informasi. Ld.Farida

ALGORITMA PENGURUTAN & PENCARIAN

ANALISIS PERBANDINGAN METODE ALGORITMA QUICK SORT DAN MERGE SORT DALAM PENGURUTAN DATA TERHADAP JUMLAH LANGKAH DAN WAKTU

Sorting adalah proses mengatur sekumpulan objek menurut aturan atau susunan tertentu. Urutan objek tersebut dapat menaik (ascending = dari data kecil

Algoritma dan Pemrograman 2 PENGURUTAN

BAB VI Pengurutan (Sorting)

Algoritma dan Pemrograman Sorting (Pengurutan) IS1313. Oleh: Eddy Prasetyo N

BAB VI SEARCHING (PENCARIAN)

SORTING (PENGURUTAN DATA)

Alpro & Strukdat 1 C++ (Sorting) Dwiny Meidelfi, M.Cs

STRUKTUR DATA. By : Sri Rezeki Candra Nursari 2 SKS

PERTEMUAN 10 METODE DEVIDE AND CONQUER

1. Kompetensi Mengenal dan memahami algoritma percabangan yang komplek.

SATUAN ACARA PERKULIAHAN (SAP) Mata Kuliah : Struktur Data Kode : TIS3213 Semester : III Waktu : 2 x 3 x 50 Menit Pertemuan : 12 & 13

PERTEMUAN 10 METODE DEVIDE AND CONQUER

ANALISIS PERBANDINGAN ALGORITMA SELECTION SORT DENGAN MERGE SORT

SEQUENTIAL SEARCH 11/11/2010. Sequential Search (Tanpa Variabel Logika) untuk kondisi data tidak terurut

BAB VI SORTIR ATAU PENGURUTAN

SORTING. Hartanto Tantriawan, S.Kom., M.Kom

Pengertian Algoritma Pengurutan

1. Kompetensi Mengenal dan memahami notasi-notasi algoritma yang ada.

Algoritma dan Pemrograman Lanjut. Pertemuan Ke-8 Pengurutan (Sorting) 1

PROGRAM STUDI S1 SISTEM KOMPUTER UNIVERSITAS DIPONEGORO. Oky Dwi Nurhayati, ST, MT

ALGORITMA PENGURUTAN. Oleh : S. Thya Safitri, MT

Nama : Suseno Rudiansyah NPM : Kelas : X2T Prodi : Teknik Informatika Tugas : Kuis Algoritma 2

Algoritma Transposisi (Bubble Sort/pengurutan gelembung)

STRUKTUR DATA SORTING ARRAY

Algoritma Sorting. Ahmad Kamsyakawuni, S.Si, M.Kom. Jurusan Matematika Fakultas Matematika dan Ilmu Pengetahuan Alam Universitas Jember

Algoritma Bubble Sort dan Quick Sort

SORTING ARRAY FAKULTAS TEKNOLOGI INFORMASI UNISBANK SEMARANG : ANDY KRISTIANTO : Disusun Oleh :

STRATEGI DIVIDE AND CONQUER

ARRAY STATIS. Type namatype_array = array [1..maks_array] of tipedata. nama_var_array : namatype_array {indeks array dari 1 sampai maksimum array}

BAB 2 LANDASAN TEORI

Konsep Sorting dalam Pemrograman Saniman dan Muhammad Fathoni

Politeknik Elektronika Negeri Surabaya

Studi Mengenai Perbandingan Sorting Algorithmics Dalam Pemrograman dan Kompleksitasnya

BAB 8 SORTING DAN SEARCHING

Materi 4: SORTING (PENGURUTAN) Dosen:

7. SORTING DAN SEARCHING

KOMPLEKSITAS ALGORITMA PENGURUTAN (SORTING ALGORITHM)

Pengurutan (Sorting)

SORTING. Brigida Arie Minartiningtyas, M.Kom

Teknik Pengurutan Kartu Remi

Algoritma Brute Force (Bagian 1) Oleh: Rinaldi Munir

Quick Sort dan Merge Sort. Arna Fariza Yuliana Setiowati

: Mahasiswa mampu menjelaskan teknik pemrograman menggunakan Sorting. Quick Sort

STRUKTUR DATA (3) sorting array. M.Cs

SEARCHING & SORTING. Pendahuluan

Array (Tabel) bagian 2

BAB 8 SORTIR. Pengurutan data (sorting) adalah suatu proses untuk menyusun kembali himpunan obyek menggunakan aturan tertentu.

Powered by icomit.wordpress.com

Sorting Algorithms. Algoritma dan Struktur Data. Sorting algorithms

Pengurutan pada Array. Tim PHKI Modul Dasar Pemrograman Fakultas Ilmu Komputer UDINUS Semarang

STRUKTUR DATA. Nama : Sulfikar Npm : STMIK Handayani Makassar

Perbandingan Kecepatan/Waktu Komputasi Beberapa Algoritma Pengurutan (Sorting)

TELAAH WAKTU EKSEKUSI PROGRAM TERHADAP KOMPLEKSITAS WAKTU ALGORITMA BRUTE FORCE DAN DIVIDE AND CONQUER DALAM PENYELESAIAN OPERASI LIST

Gambar 13.1 Ilustrasi proses algoritma sorting

Algoritma dan Pemrograman Lanjut. Pertemuan Ke-9 Pengurutan (Sorting) 2

BAB VII ALGORITMA DIVIDE AND CONQUER

METODE DEVIDE AND CONQUER (DANDC)

BAB XII MENCARI DATA MAKSIMUM DAN MINIMUM

Pendahuluan. Sebuah algoritma tidak saja harus benar, tetapi juga harus efisien. Algoritma yang bagus adalah algoritma yang efektif dan efisien.

Algoritma Brute Force

Sorting Algorithms. Divide and Conquer

S O R T I R 6.1 SORTIR TERHADAP RECORD

oleh : Edhy Suta tanta

CCH1A4 / Dasar Algoritma & Pemrogramanan

Algoritma dan Pemrograman 2 PENGURUTAN

PENGGUNAAN ALGORITMA DIVIDE AND CONQUER UNTUK OPTIMASI KONVERSI BILANGAN DESIMAL KE BINER

Kompleksitas Algoritma Pengurutan Selection Sort dan Insertion Sort

Algoritma Divide and Conquer (Bagian 2)

Array ARRAY BERDIMENSI SATU. Representasi (Pemetaan) di memori. Lihat gambar dibawah ini, nilai data A (18) dismpan mulai dari alamat 1136 di memori.

Kompleksitas Algoritma (1)

PENGURUTAN (SORTING) 1. Overview

Modul 8 SORTING (PENGURUTAN)

SEARCHING (PENCARIAN)

Bubble Sort (Pengurutan Gelembung / Pemberatan)

Pengkajian Algoritma Pengurutan-Tanpa-Pembandingan Counting Sort dan Radix Sort

Sorting Algorithms. Definisi

Algoritma Sorting (Selection Insertion)

Analisis Algoritma. Jimmy Tirtawangsa. Universitas Telkom 2014

Data Structure SORTING. Chapter 11. Dahlia Widhyaestoeti, S.Kom

Praktikum 9. Pengurutan (Sorting) Quick Sort, Merge Sort

Algoritma dan Pemrograman Array/Tabel[3] Oleh: Eddy Prasetyo N

Analisis Kecepatan Sorting Dengan Notasi Big O

Decrease and Conquer

SATUAN ACARA PERKULIAHAN (SAP) Mata Kuliah : Struktur Data Kode : TIS3213 Semester : III Waktu : 2 x 3 x 50 Menit Pertemuan : 14 & 15

Operasi File. Chapter 13

Algoritma dan Struktur Data. Searching dan Sorting

DIKTAT STRUKTUR DATA Oleh: Tim Struktur Data IF

BAHASA PEMROGRAMAN 1 (PERTEMUAN 3)

BAB III QUEUE (ANTRIAN)

Transkripsi:

PENGURUTAN DATA 2.1 Definisi Pengurutan Pengurutan (sorting) adalah proses mengatur sekumpulan objek menurut urutan atau susunan tertentu. Urutan objek tersebut dapat menaik (ascending) atau menurun (descending). Bila N buah objek (data) disimpan dalam larik L, maka pengurutan menaik berarti menyusun elemen larik sedemikian sehingga : L[1] L[2] L[3].. L[N] Sedangkan pengurutan menurun berarti menyusun elemen larik sedemikian sehingga: L[1] L[2] L[3].. L[N] Data yang diurut dapat berupa data yang bertipe dasar atau tipe terstruktur (record). Jika data bertipe terstruktur, maka harus dispesifikasikan berdasarkan field apa data tersebut diurutkan. Field yang dijadikan dasar pengurutan dikenal sebagai field kunci. Contoh : Di bawah ini diberikan beberapa contoh data yang terurut : a. 23, 27, 45, 67, 100, 130, 501 (data bertipe integer terurut menaik) b. 50, 27, 21.009, 20.3, 19.0, -5.2, -10.9 (data bertipe riil terurut menurun) c. Amir Badu Budi Dudi Zamzani (data bertipe string terurut menaik) d. d, e, g, i, x (data bertipe karakter terurut menaik) 2.2 Metode-metode Pengurutan Adanya kebutuhan terhadap proses pengurutan memunculkan bermacammacam metode pengurutan. Banyak metode pengurutan yang telah ditemukan. Hal ini menunjukkan bahwa persoalan yang kaya dengan solusi algoritmik. Metode pengurutan yang ditemukan dalam literatur komputer antara lain : 1. Metode Pengurutan Gelembung (Bubble Sort) 1

2. Metode Pengurutan Pilih (Selection Sort) 3. Metode Pengurutan Sisip (Insertion Sort) 4. Metode Pengurutan Shell 5. Metode Pengurutan Quick 6. Metode Pengurutan Merge 7. Metode Pengurutan Radix 8. Metode Pengurutan Tree 2.2.1 Metoda Pengurutan Gelembung Metode pengurutan gelembung (bubble sort) diinspirasi oleh gelembung sabun yang berada di atas permukaan air. Karena berat jenis gelembung asbun lebih ringan daripada berat jenis air, maka gelembung sabun selalu terapung ke atas permukaan. Secara umum, benda-benda yang berat akan terbenam dan bendabenda yang ringan akan terapung. Prinsip pengapungan tersebut yang digunakan pada metode pengurutan gelembung. Apabila kita menginginkan larik terurut menaik, maka elemen yang nilainya paling kecil diapungkan, artinya dipindahkan ke ujung larik melalui proses pertukaran. Proses pengapungan dilakukan sebanyak N-1 langkah (satu langkah disebut juga satu kali pass) dengan N adalah ukuran larik. Pada akhir setiap langkah ke-i, larik L[1-N] akan terbagi atas dua bagian yaitu bagian yang sudah terurut dan yang belum terurut. Setelah langkah terakhir diperoleh larik L[1-N] yang sudah terurut menaik. Algoritma Pengurutan gelembung {Untuk larik yang terurut menaik} 1. input N jumlah data 2. untuk pass = 1, 2,. N-1 set maks := A[K] untuk K = 1, 2,. N jika maks < A[K] maka maks := A[K] tukar posisi 2

3. selesai rincian setiap pass adalah : pass 1 : Mulai dari elemen K = N, N-1, 2, bandingkan L[K] dengan L[K- 1]. Jika L[K]<L[K-1], tukar posisi L[K] dengan L[K-1] pada akhir langkah 1, elemen L[1] berisi harga minimum pertama. pass 1 : Mulai dari elemen K = N, N-1, 3, bandingkan L[K] dengan L[K- 1]. Jika L[K]<L[K-1], tukar posisi L[K] dengan L[K-1] pada akhir langkah 2, elemen L[2] berisi harga minimum kedua, larik L[1..2] terurut, sedangkan L[3..N] belum terurut. pass N-1 : Mulai dari elemen K = N, bandingkan L[K] dengan L[K-1]. Jika L[K]<L[K-1], tukar posisi L[K] dengan L[K-1] Pada akhir langkah N 1, elemen L[N-1] berisi nilai minimum ke-(n-1) an larik L[1..N-1] terurut menaik (elemen yang tersisa adalah L[N], tidak perlu diurut karena hanya satu-satunya). Contoh: Tinjau laruk L dengan N=6 buah elemen yang belum terurut. Larik ini akan diurut menaik. 25 27 10 8 76 21 pass 1: K Elemen yang dibandingkan Pertukarkan Hasil Sementara K = 6 L[6]<L[5]? Ya 25,27,10,8,21,76 K = 5 L[5]<L[4]? Tidak 25,27,10,8,21,76 K = 4 L[4]<L[3]? Ya 25,27,8,10,21,76 K = 3 L[3]<L[2]? Ya 25,8,27,10,21,76 K = 2 L[2]<L[1]? Ya 8,25,27,10,21,76 Hasil akhir pass 1 8 25 27 10 21 76 pass 2: 3

K Elemen yang dibandingkan Pertukarkan Hasil Sementara K = 6 L[6]<L[5]? Tidak 8,25,27,10,21,76 K = 5 L[5]<L[4]? Tidak 8,25,27,10,21,76 K = 4 L[4]<L[3]? Ya 8,25,10,27,21,76 K = 3 L[3]<L[2]? Ya 8,10,25,27,21,76 Hasil akhir pass 2 8 10 25 27 21 76 pass 3: K Elemen yang dibandingkan Pertukarkan Hasil Sementara K = 6 L[6]<L[5]? Tidak 8,10,25,27,21,76 K = 5 L[5]<L[4]? Ya 8,10,25,21,27,76 K = 4 L[4]<L[3]? Ya 8,10,21,25,27,76 Hasil akhir pass 2 8 10 21 25 27 76 pass 4: K Elemen yang dibandingkan Pertukarkan Hasil Sementara K = 6 L[6]<L[5]? Tidak 8,10,21,25,27,76 K = 5 L[5]<L[4]? Tidak 8,10,21,25,27,76 Hasil akhir pass 4 8 10 21 25 27 76 pass 5: K Elemen yang dibandingkan Pertukarkan Hasil Sementara K = 6 L[6]<L[5]? Tidak 8,10,21,25,27,76 Hasil akhir pass 5 8 10 21 25 27 76 4

tersisa satu elemen (yaitu 76), maka pengurutan selesai. Larik L sudah terurut menaik. Untuk memperoleh larik yang terurut menurun, kita melakukan proses sebaliknya, yaitu melemparkan elemen yang berharga maksimum ke atas (atau ke ujung kiri larik). Pengurutan gelembung merupakan metode pengurutan yang tidak efisien karena banyaknya langkah yang dilakukan pada setiap langkah pengapungan. Untuk ukuran larik yang besar, pengurutan dengan metode ini membutuhkan waktu yang lama. 2.2.2 Metode Pengurutan Pilih Metode ini disebut pengurutan pilih karena gagasan dasarnya adalah memilih elemen maksimum/minimum dari larik, lalu menempatkan elemen tersebut pada awal/akhir larik (elemen terujung). Selanjutnya elemen tersebut diisolasi dan tidak disertakan pada proses selanjutnya. Proses yang sama diulang pada larik yang tersisa. Algoritma Pengurutan Pilih Maksimum Algoritma pengurutan pilih maksimum yaitu memilih elemen maksimum sebagai basis pengurutan. Untuk mendapatkan larik yang terurut menaik. Secara umum algoritma pengurutan pilih maksimum ditulis sebagai berikut : 1. jumlah pass = N-1 2. Untuk setiap I = 1, 2, pass 2.1 cari elemen terbesar (maks) mulai dari elemen ke-1 sampai elemen ke-n 2.2 pertukarkan maks dengan elemen ke-n 2.3 kurangi N satu (karena elemen ke-n sudah terurut) rincian pada setiap pass adalah : pass 1 : Cari elemen maksimum di L[1..N] pertukarkan elemen maksimum dngan elemen L[N] ukuran larik yang belum terurut = N-1 5

pass 2 : Cari elemen maksimum di L[1..N-1] pertukarkan elemen maksimum dngan elemen L[N-1] ukuran larik yang belum terurut = N-2 pass N-1 : Cari elemen maksimum di L[1..2] pertukarkan elemen maksimum dngan elemen L[2] ukuran larik yang belum terurut =1 Elemen yang tersisa adalah L[1], tidak perlu diurut karena hanya satu-satunya. Contoh: Tinjau larik dengan N=6 buah elemen di bawah ini. Larik ini akan diurut menaik: 29 27 10 8 76 21 pass 1: Cari elemen maksimum di dalam larik L[1..6] maks = L[5] = 76 Pertukarkan maks dengan L[6], diperoleh : 29 27 10 8 21 76 pass 2: (berdasarkan susunan larik hasil pass 1) Cari elemen maksimum di dalam larik L[1..5] maks = L[1] = 29 Pertukarkan maks dengan L[5], diperoleh : 21 27 10 8 29 76 pass 3: (berdasarkan susunan larik hasil pass 2) Cari elemen maksimum di dalam larik L[1..4] maks = L[2] = 27 Pertukarkan maks dengan L[4], diperoleh : 21 8 10 27 29 76 pass 4: (berdasarkan susunan larik hasil pass 3) 6

Cari elemen maksimum di dalam larik L[1..3] maks = L[1] = 21 Pertukarkan maks dengan L[3], diperoleh : 10 8 21 27 29 76 pass 5: (berdasarkan susunan larik hasil pass 4) Cari elemen maksimum di dalam larik L[1..2] maks = L[1] = 10 Pertukarkan maks dengan L[3], diperoleh : 8 10 21 27 29 76 tersisa satu elemen (yaitu 8) maka pengurutan selesai. Larik L sudah terurut menaik. Apabila diinginkan larik yang terurut menurun, maka algoritma pengurutan pilih adalah : Untuk setiap pass I = 1, 2, N-1 1.1 cari elemen terbesar (maks) mulai dari elemen ke-1 sampai elemen ke-n 1.2 pertukarkan maks dengan elemen ke-n rincian pada setiap pass adalah : pass 1 : Cari elemen maksimum di L[1..N] pertukarkan elemen maksimum dngan elemen L[1] pass 2 : Cari elemen maksimum di L[2..N] pertukarkan elemen maksimum dngan elemen L[2] pass N-1 : Cari elemen maksimum di L[N-1,N] pertukarkan elemen maksimum dngan elemen L[N-1] Elemen yang tersisa adalah L[N], tidak perlu diurut karena hanya satu satunya. Contoh: Tinjau larik dengan N=6 buah elemen di bawah ini. Larik ini akan diurut menaik: 29 27 10 8 76 21 7

pass 1: Cari elemen maksimum di dalam larik L[1..6] Imaks = 5, L[Imaks] = 76 Pertukarkan L[Imaks] dengan L[1], diperoleh : 76 27 10 8 29 21 pass 2: (berdasarkan susunan larik hasil pass 1) Cari elemen maksimum di dalam larik L[2..6] Imaks = 5, L[Imaks] = 29 Pertukarkan L[Imaks] dengan L[2], diperoleh : 76 29 10 8 27 21 pass 3: (berdasarkan susunan larik hasil pass 2) Cari elemen maksimum di dalam larik L[3..6] Imaks = 5, L[Imaks] = 27 Pertukarkan L[Imaks] dengan L[3], diperoleh : 76 29 27 8 10 21 pass 4: (berdasarkan susunan larik hasil pass 3) Cari elemen maksimum di dalam larik L[4..6] Imaks = 6, L[1maks] = 21 Pertukarkan L[Imaks] dengan L[4], diperoleh : 76 29 27 21 10 8 pass 5: (berdasarkan susunan larik hasil pass 4) Cari elemen maksimum di dalam larik L[5..6] Imaks = 5, L[Imaks] = 10 Pertukarkan maks dengan L[2], diperoleh : 76 29 27 21 10 8 tersisa satu elemen (yaitu 8) maka pengurutan selesai. Larik L sudah terurut menurun. 8

Algoritma Pengurutan Pilih Minimum Pada algoritma ini, basis pencarian adalah elemen minimum (terkecil). Elemen minimum ditempatkan di awal larik (agar terurut menaik) atau di akhir larik (agar larik terurut menurun) Algoritma pilih minimum untuk memperoleh larik yang terurut menaik secara garis besarnya adalah sebagai berikut: Untuk setiap pass I = 1, 2, N-1 1.1 cari elemen terbesar (maks) mulai dari elemen ke-1 sampai elemen ke-n 1.2 pertukarkan maks dengan elemen ke-i rincian pada setiap pass adalah : pass 1 : pass 2 : pass N-1 : Cari elemen minimum di L[1..N] pertukarkan elemen minimum dngan elemen L[1] Cari elemen minimum di L[2..N] pertukarkan elemen minimum dngan elemen L[2] Cari elemen minimum di L[N-1,N] pertukarkan elemen minimum dngan elemen L[N-1] Elemen yang tersisa adalah L[N], tidak perlu diurut karena hanya satu satunya. Contoh: Tinjau larik dengan N=6 buah elemen di bawah ini. Larik ini akan diurut menaik: 29 27 10 8 76 21 pass 1: Cari elemen minimum di dalam larik L[1..6] Imin = 4, L[Imin] = 8 Pertukarkan L[Imin] dengan L[1], diperoleh : 8 27 10 29 76 21 pass 2: (berdasarkan susunan larik hasil pass 1) Cari elemen maksimum di dalam larik L[2..6] Imin = 3, L[Imin] = 10 Pertukarkan L[Imin] dengan L[2], diperoleh : 8 10 27 29 76 21 9

pass 3: (berdasarkan susunan larik hasil pass 2) Cari elemen maksimum di dalam larik L[3..6] Imin = 6, L[Imin] = 21 Pertukarkan L[Imin] dengan L[3], diperoleh : 8 10 21 29 76 27 pass 4: (berdasarkan susunan larik hasil pass 3) Cari elemen maksimum di dalam larik L[4..6] Imin = 6, L[Imin] = 27 Pertukarkan L[Imin] dengan L[4], diperoleh : 8 10 21 27 76 29 pass 5: (berdasarkan susunan larik hasil pass 4) Cari elemen maksimum di dalam larik L[5..6] Imin = 6, L[Imin] = 29 Pertukarkan L[Imin] dengan L[5], diperoleh : 8 10 21 27 29 76 tersisa satu elemen (yaitu 76) maka pengurutan selesai. Larik L sudah terurut menaik. Apabila diinginkan elemen terururt menurun, maka lakukan proses sebaliknya. Contoh: Tinjau larik dengan N=6 buah elemen di bawah ini. Larik ini akan diurut menaik: 29 27 10 8 76 21 pass 1: Cari elemen minimum di dalam larik L[1..6] Imin = 4, L[Imin] = 8 Pertukarkan L[Imin] dengan L[N], diperoleh : 29 27 10 21 76 8 10

pass 2: (berdasarkan susunan larik hasil pass 1) Cari elemen maksimum di dalam larik L[1..5] Imin = 3, L[Imin] = 10 Pertukarkan L[Imin] dengan L[5], diperoleh : 29 27 76 21 10 8 pass 3: (berdasarkan susunan larik hasil pass 2) Cari elemen maksimum di dalam larik L[1..4] Imin = 4, L[Imin] = 21 Pertukarkan L[Imin] dengan L[4], diperoleh : 29 27 76 21 10 8 pass 4: (berdasarkan susunan larik hasil pass 3) Cari elemen maksimum di dalam larik L[1..3] Imin = 2, L[Imin] = 27 Pertukarkan L[Imin] dengan L[3], diperoleh : 29 76 27 21 10 8 pass 5: (berdasarkan susunan larik hasil pass 4) Cari elemen maksimum di dalam larik L[1..2] Imin = 1, L[Imin] = 29 Pertukarkan L[Imin] dengan L[2], diperoleh : 76 29 27 21 10 8 tersisa satu elemen (yaitu 76) maka pengurutan selesai. Larik L sudah terurut menurun. Dibandingkan dengan metode pengurutan gelembung, metode ini lebih baik karena operasi pertukaran elemen hanya dilakukan sekali saja pada setiap pass, dengan demikian lama pengurutannya berkurang dibandingkan metode pengurutan gelembung. 11

2.2.3 Metode Pengurutan Sisip Berdasarkan namanya, pengurutan sisip (insertion sort) adalah metode pengurutan dengan cara menyisipkan elemen larik pada posisi yang tepat. Pencarian posisi yang tepat dilakukan dengan cara menyisir larik. Selama penyisiran dilakukan pergeseran elemen larik. Metode ini cocok untuk persoalan menyisipkan elemen baru ke dalam sekumpulan elemen yang sudah terurut. Algoritma Pengurutan Sisip { untuk pengurutan menaik} untuk setiap pass I = 2, 3,. N, lakukan 1. set y = L[I] 2. sisipkan y pada tempat yang tepat antara L[1]. L[2] rincian setiap pass adalah : Asumsi (dianggap sebagai pass 1) : L[1] dianggap sudah pada tempatnya Pass 2 : Elemen y =L[2] harus dicari tempatnya yang tepat ke dalam L[1..2] dengan cara menggeser elemen L[1..1] ke kanan (atau ke bawah) jika anda membayangkan larik terentang vertikal), bila L[1..1] lebih besar L[1]. Misalkan posisi yang tepat adalah K. sisipkan L[2] pada L[K] Pass 2 : Elemen y =L[3] harus dicari tempatnya yang tepat ke dalam L[1..3] dengan cara menggeser elemen L[1..2] ke kanan (atau ke bawah) jika anda membayangkan larik terentang vertikal), bila L[1..2] lebih besar L[3]. Misalkan posisi yang tepat adalah K. sisipkan L[3] pada L[K] Pass N : Elemen y =L[N] harus dicari tempatnya yang tepat ke dalam L[1..N] dengan cara menggeser elemen L[1..N-1] ke kanan (atau ke bawah) jika anda membayangkan larik terentang vertikal), bila L[1..N-1] lebih besar L[N]. Misalkan posisi yang tepat adalah K. sisipkan L[N] pada L[K] Hasil dari pass N : larik L[1..N] sudah terurut menaik. 12

Contoh: Tinjau larik dengan N=6 buah elemen di bawah ini. Larik ini akan diurut menaik: 29 27 10 8 76 21 Asumsi (pass 1): Elemen y = L[1] = 29 dianggap sudah terurut 29 27 10 8 76 21 pass 2: (berdasarkan susunan larik hasil pass 1) Cari posisi yang tepat untuk y = L[2] = 27 di dalam L[1..2], diperoleh: 27 29 10 8 76 21 pass 3: (berdasarkan susunan larik hasil pass 2) Cari posisi yang tepat untuk y = L[3] = 10 di dalam L[1..3], diperoleh: 10 27 29 8 76 21 pass 4: (berdasarkan susunan larik hasil pass 3) Cari posisi yang tepat untuk y = L[4] = 8 di dalam L[1..4], diperoleh: 8 10 27 29 76 21 pass 5: (berdasarkan susunan larik hasil pass 4) Cari posisi yang tepat untuk y = L[5] = 76 di dalam L[1..5], diperoleh: 8 10 27 29 76 21 13

pass 6: (berdasarkan susunan larik hasil pass 5) Cari posisi yang tepat untuk y = L[6] = 21 di dalam L[1..6], diperoleh: 8 10 21 27 29 76 Berdasarkan contoh di atas, dapat diketahui bahwa kelemahan dari metode ini terletak pada banyaknya operasi pergeseran yang diperlukan dalam mencari posisi yang tepat untuk elemen larik. Pada setiap pass I, operasi pergeseran yang diperlukan maksimum I-1 kali. Untuk larik N yang besar, jumlah operasi pergeseran meningkat secara kuadratik, sehingga pengurutan sisip kurang bagus untuk volume data yang besar. 2.2.4 Metode Pengurutan Shell Metode ini diberi nama sesuai dengan nama penemunya yaitu Donald Shell tahun 1959. Metode ini merupakan perbaikan terhadap metode pengurutan sisip. Kelemahan metode sisip sudah diterangkan di atas. Jika data pada posisi ke- 1000 ternyata posisi yang tepat adalah posisi ke-2, maka dibutuhkan kira-kira 998 kali pergeseran elemen. Untuk mengurangi pergeseran terlalu jauh, kita mengurutkan larik setiap k elemen dengan metode pengurutan sisip, misalkan kita urutkan setiap 5 elemen (k kita namakan juga step atau increment ). Selanjutnya kita gunakan nilai step yang lebih kecil, misalnya k = 3 lalu kita urut setiap 3 elemen. Begitu seterusnya sampai nilai k = 1. karena setiap step selalu berkurang maka metode ini kadangkadang dinamakan juga dengan metode pengurutan kenaikan berkurang (diminishing increment sort). Contoh: Untuk memperjelas metode pengurutan shell, tinjau pengurutan data integer berikut: 81 94 11 96 12 35 17 95 28 58 41 75 15 7 8 9 10 11 12 13 14

pass 1 (step =5): urutkan setiap 5 elemen 81 94 11 96 12 35 17 95 28 58 41 75 15 7 8 9 10 11 12 13 35..41.81 17.75.94 11 15 95 28 96 12 58 baris pertama menyatakan elemen yang sudah terurut pada posisi 1, 6 dan 11 baris kedua menyatakan elemen yang sudah terurut pada posisi 2, 7 dan 12 baris ketiga menyatakan elemen yang sudah terurut pada posisi 3, 9 dan 13 baris keempat menyatakan elemen yang sudah terurut pada posisi 4 dan 9 baris kelima menyatakan elemen yang sudah terurut pada posisi 5 dan 10 hasil pass 1 : 35, 17, 11, 28, 12, 41, 75, 15, 96, 58, 81, 94, 95 pass 2 (step = 3) : urutkan setiap 3 elemen 35 17 11 28 12 41 75 15 96 58 81 94 95 7 8 9 10 11 12 13 28 35..58 75..95 12 15..17.81 11..41 94.96 hasil pass 2 : 28, 12, 11, 35, 15, 41, 58, 17, 94, 75, 81, 96, 95 28 12 11 35 15 41 58 17 94 75 81 96 95 7 8 9 10 11 12 13 11 12 15 17 28.35.41.58.75.81.94 95.96 hasil pass 3 : 11, 12, 15, 17, 28, 35, 41, 58, 75, 81, 94, 95, 96 Perhatikanlah pada pass yang terakhir (step =1) pengurutan shell menjadi sama dengan pengurutan sisip biasa. Nilai-nilai step seperti 5, 3 dan 1 bukanlah angka sihir. Kita dapat memilih nilai-nilai step yang lain yang bukan kelipatan step yang lain. Pemilihan step yang merupakan perpangkatan dari dua (seperti 8, 4, 2, 1) dapat mengakibatkan perbandingan elemen yang sama pada suatu pass terulang kembali pada pass berikutnya. 15

1. step := N {N ukuran larik} 2. while step>1 do a. step := step div 3 +1 b. for I =1,2 step do insertion sort setiap elemen step mulai dari elemen ke-i Algoritma pengurutan shell dibuat dengan pertama-tama memodifikasi algoritma pengurutan sisip sedemikian sehinggakita dapat menspesifikasi titik awal pengurutan sisip sedemikian sehingga kita dapat menspesifikasi titik awal pengurutan da ukuran step (pada algoritma pengurutan sisip yang asli, titik awal pengurutan adalah elemen pertama dan ukuran step = 1). Algoritma pengurutan sisip ini kita beri nama InsSort. 2.2.5 Metoda QuickSort Metoda QuickSort juga sering disebut dengan metoda partition exchange sort. Metoda ini ditemukan oleh C.A.R.Hoare.Untuk mempertinggi efektifitasnya, dalam metoda ini jarak kedua elemen yang akan ditukarkan nilainya ditentukan cukup besar. Secara garis besar metoda ini dijelaskan sebagai berikut. Misalkan kita akan mengurutkan vector A yang mempunyai N elemen.kita pilih sembarang elemen dari vector tersebut,biasanya elemen pertama, misalnya X.Lalu semua elemen tersebut disusun dengan menempatkan X pada posisi J,sedemikian rupa sehingga elemen ke 1 sampai elemen ke J-1 mempunyai nilai lebih kecil dari X dan elemen kej+1 sampai ke N mempunyai nilai lebih besar dari X. Dengan demikian kita mempunyai 2 buah subvector, subvektor pertama nilai elemennya lebih kecil dari X, subvektor ke-2 nilai elemennya lebih besar dari X. Pada langkah berikutnya, proses di atas diulang pada kedua subvektor, sehingga kita akan mempunyai empat buah subvektor. Proses di atas diulang pada setiap subvektor sehingga seluruh vector semua elemennya terurutkan. Contoh : Misalkan kita punya vector yang elemennya : 16

23 45 12 24 56 34 27 23 16 Gambar 1 Diambil elemen pertama,yaitu 23. Elemen ini akan diletakkan di suatu posisi sehingga akan membagi vector atas 2 subvektor. Dengan subvektor pertama (subvektor kiri) nilai elemennya selalu lebih kecil atau sama dengan 23, dan subvektor kedua(subvektor kanan)nilainya selalu lebih besar dari 23.Masingmasing subvektor tersaji pada gambar 2. 12 23 16 23 45 24 56 34 27 Gambar 2 Kemudian pada kedua subvektor tersebut kita proses seperti di atas sampai seluruh vector dalam keadaan terurutkan. Gambar 3 menyajikan proses selengkapnya dari metode QuickSort untuk mengurutkan vector dari gambar 1. 23 45 12 24 56 34 27 23 16 12 23 16 23 45 24 56 34 27 12 23 12 23 24 34 27 45 56 12 16 23 23 24 27 34 45 56 12 16 23 23 24 27 34 45 56 Gambar 3. Ilustrasi Quicksort Gambar 3. di atas menunjukkan proses pembagian dari vector menjadi subvektor-subvektor,subvektor menjadi subvektor dan seterusnya. Gambar 4 memperlihatkan isi vector setelah proses pengurutan selesai dilaksanakan. 12 16 23 23 24 27 34 45 56 Gambar 4.Hasil akhir dari metoda QuickSort 17

Dari ilustrasi di atas dapat dilihat bahwa metoda QuickSort bisa diimplementasikan menggunakan dua cara,yaitu : 1. Cara non Rekursif 2. Cara Rekursif Pada kedua cara implementasi di atas, persoalan utama yang perlu diperhatikan adalah bagaimana kita meletakkan suatu elemen pada posisi yang tepat sehingga memenuhi ketentuan di atas dan bagaimana menyimpan batasbatas subvektor pada saat vector dibagi menjadi dua subvektor, kemudian menjadi 4 subvektor,8 subvektor dan seterusnya. Gambar 3 memperlihatkan bahwa elemen pertama sampai di suatu tempat yang sesuai hanya dengan bergerak satu arah saja. Sedangkan untuk mempercepat penempatan suatu elemen, kita bisa bergerak dari dua arah, kiri dan kanan. Caranya adalah sebagai berikut : Misalkan kita mempunyai vector dengan 9 elemen (N=9) 45 64 12 24 56 34 127 23 126 I=1 J=9 1. Tentukan I=1(untuk bergerak dari kiri ke kanan) dan J=N(untuk bergerak dari kanan ke kiri) Proses akan dihentikan bila nilai I lebih besar atau sama dengan J 2. ambil 45(elemen pertama) pada posisi yang tepat bergerak dua arah.dimulai dari elemen terakhir bergerak dari kanan ke kiri (J-1) lakukan pembandingan elemen yang dilalui dengan 45 sampai ditemukan elemen yang nilainy lebih kecil dari 45, yaitu 23,tukarkan kedua vector. 23 64 12 24 56 34 127 45 126 I=1 J=8 3. Bergerak dari kiri ke kanan (I+1),dimulai dari 23. Lakukan pembandingan pada setiap elemen yang dilalui dengan 45, sampai ditemukan elemen yang nilainya lebih besar dari 45, yaitu 64.Tukarkan kedua elemen. 23 45 12 24 56 34 127 64 126 I=2 J=8 4. Bergerak dari kanan ke kiri dimulai dari 127. Ditemukan bahwa 34 lebih kecil dari 45, sehingga kedua elemen ini saling ditukarkan. 18

23 34 12 24 56 45 127 64 126 I=2 J=6 5. Mulai dari 12(bergerak dari kiri ke kanan) sampai ditemukan elemen yang nilainya lebih besar dari 45,yaitu 56.Tukarkan kedua elemen. 23 34 12 24 45 56 127 64 126 I=5 J=6 5. Mulai dari 45(J=5) bergerak ke kiri sampai ditemukan elemen yang nilainya lebih kecil dari 45. Pada langkah ini ternyata nilai I dan J adalah sama. Hal ini berarti proses penempatan elemen yang bernilai 45 telah selesai. Di sini kita dapatkan bahwa semua elemen yang terletak di sebelah kiri nilainya selalu lebih kecil dari 45, semua elemen yang terletak di sebelah kanan nilainya selalu lebih besar dari 45,seperti yang terlihat di bawah ini : 23 34 12 24 45 56 127 64 126 Subvektor kiri subvektor kanan a. Metoda QuickSort Non Rekursif Implementasi secara non rekursif memerlukan dua buah tumpukan yang digunakan untuk menyimpan batas-batas subvektor. Tumpukan pertama mencatat batas kiri subvektor dan tumpukan kedua mencatat bata kanan. Masing-masing elemen pada dua tumpukan ini harus bertipe integer karena mencatat subskrip suatu elemen. dalam prosedur yang disajikan hanya digunakan sebuah tumpukan,tapi elemennya bertipe record yang terdiri dari dua medan, yaitu Kiri (untuk mencatat batas kiri) dan Kanan (untuk mencatat batas kanan). Dalam hal ini tumpukan dideklaraikan sebagai array. Dengan mengacu pada contoh di atas, sebelum metoda ini dijalankan elemen pertama tumpukan (elemen paling atas),medan kiri diatur sama dengan 1,dan medan kanan sama dengan N, lihat gambar 5.a. Setelah elemen yang bernilai 45 dibawa pada posisi yang tepat maka isi tumpukan akan berubah seperti gambar 5.b. 19

Sesuai dengan sifat tumpukan, maka elemen paling atas akan dikerjakan lebih dulu. Sehingga denga melihat gambar 5.b, maka subvektor kanan (dengan batas Kiri = 6 dan batas kanan = 9) akan dikerjakan lebih dulu. Pada saat subvektor ini dikerjakan maka isi tumpukan ini akan dipop. Dengan kata lain pada saat program mengerjakan subvektor sebelah kanan, maka isi tumpukan hanya tinggal sebuah elemen. 1 6 9 9 1 4 kiri kanan kiri kanan a Gambar 5. Perubahan isi tumpukan a. Pada saat mulai iterasi b. Setelah satu elemen ditempatkan b Algoritma QUICKSORT_NON_REKURSIF [Pengurutan elemen menggunakan metoda non rekursifquicksort. Masukan dinyatakan sebagai vector A(belum terurutkan),dan N(banyak elemen).keluaran adalah vector A yang sudah terurut.] Langkah 0 Baca vector yang akan diurutkan(dalam program utama) dan deklarasikan sebuah tumpukan. Langkah 1 (Inisialisasikan tumpukan) Tentukan Ujung = 1, Tumpukan[1].Kiri = 1, dan Tumpuka[1].Kanan = N. Langkah 2 Kerjakan langkah 3 dan 4 sampai Ujung = 0. Langkah 3 (Menentukan subvektor yang akan dikerjakan,sekaligus mempop elemen teratas tumpukan) Tentukan : Kr = Tumpukan [Ujung].Kiri, Knn = Tumpuka[Ujung].Kanan,dan Ujung = Ujung 1. Langkah 4 Kerjakan langkah 5 sampai 10 sampai Knn<=Kr. 20

Langkah 5 (Mengatur I dan J untuk mulai proses) Tentukan : I = Kr, J = Knn, dan Tengah = A[(Kr+Knn) div 2] Langkah 6 Kerjakan langkah 7 sampai 9 sampai I > J. Langkah 7 (Bergerak dari Kiri ke Kanan) Tambah nilai I dengan 1 selama A[I] < Tengah. Langkah 8 (Bergerak dari kanan ke kiri) Kurangi nilai J dengan 1 selama Tengah < A[J]. Langkah 9 Test : apakah I <= J? Jika ya,kerjakan langkah-langkah berikut : - Tukarkan A[I] dengan A[J], - Tambah nilai I dengan 1, - Kurangi nilai J dengan 1. Langkah 10 Tentukan : Knn = J Langkah 11 Selesai b. Metoda QuickSort Rekursif Cara ini bisa dilaksanakan karena sesungguhnya Quick Sort ini terdiri dari 3 langkah, yaitu: penenpatan suatuelemen pada posisinya yang tepat, kemudian mengurutkan subvektor kiri dan subvektor kanan. Dalam mengurutkan subvektor kiri atau kanan ketiga langkah ini diulang kembali dengan menentukan batas-batas subvektor yang akan diproses. Batas akhir proses rekursif ditentukan apabila batas kiri subvektor sudah sama dengan atau lebih besar dari batas kanan. Secara sederhana,metoda ini bisa dituliskan sebagai : Procedure QUICKSORT ( var A : larik,awal,akhir : integer); Var I,J : integer ; Begin If awal < akhir then Begin ATUR; {*menempatkan suatu elemen pada posisi J *} QUICKSORT(A,awal,J-1); {*memproses subvektor kiri *} 21

End. End QUICKSORT(A,J+1,akhir); {*memproses subvektor kanan*} Prosedur di atas dalam program utama dipanggil dengan cara : QUICKSORT(A, 1, N ); Dengan A adalah vector yang akan diurutkan, dan N cacah elemen vector. Dari struktur di atas yang perlu dijelaskan adalah prosedur ATUR yang digunakan untuk menempatkan elemen pertama pada posisinya yang tepat sesuai dengan contoh sebelumnya. Algoritma ATUR [Digunakan untuk menempatkan elemen pertama pada posisi J sedemikian rupa sehingga elemen ke 1 sampai elemen ke J-1 selalu lebih kecil dari elemen tersebut, dan elemen ke J+1 sampai ke elemen ke N selalu lebih besar dari elemen tersebut] Langkah 1 Tentukan : I = Awal + 1. Langkah 2 (Bergerak dari kiri ke kanan ) Tambah nilai I dengan 1 selama A[I] < A[Awal] Langkah 3 (Bergerak dari kanan ke kiri ) Kurangi nilai I dengan 1 selama A[J] > A[Awal]. Langkah 4 Kerjakan langkah 5 sampai 7 selama I < J Langkah 5 tukarkan nilai A[1] dengan A[J]. Langkah 6 (Bergerak dari kiri ke kanan) Tambah nilai I dengan 1 selama A[I] < A[awal]. Langkah 7 (Bergerak dari kanan ke kiri ) Kurangi nilai I dengan 1 selama A[J] > A[awal] Langkah 8 Tukarkan nilai A[I] dengan A[J] Langkah 9 Selesai. 22

2.2.6 Metode RadixSort Metode ini didasarkan pada nilai sesungguhnya dari suatu digit pada bilangan yang akan diurutkan. Seperti kita ketahui dalam sistem bilangan desimal, nilai sesungguhnya dari setiap digit akan ditentukan oleh posisi dimana digit itu berada. Sebagai contoh, dalam bilangan 2762 kita katakan bahwa nilai digit dua yang pertama berbeda dengan nilai digit dua yang kedua. Pada bilangan diatas bisa dikatakan bahwa digit 2 (yang pertama) diletakkan pada posisi ribuan, digit 7 pada posisi ratusan, digit 6 pada posisi puluhan dan digit 2 (yang kedua) diletakkan pada posisi satuan. Maka pada subbab ini digit yang ditulis paling kiri kita namakan dengan digit signifikan terbesar (most significant digit) disingkat DSB dan yang paling kanan dinamakan digit significant terkecil (least significant digit) disingkat DSK. Contoh : Data : 342, 547,321, 213, 458, 621, 120, 958, 124, 844 Iterasi pertama Data Kelompok 0 7 8 9 342 342 547 547 321 321 213 213 458 458 621 621 120 120 958 958 124 844 124 844 Hasil 120 321 621 342 213 124 844 547 458 958 Iterasi kedua Data Kelompok 0 7 8 9 120 321 621 120 321 621 342 342 213 213 23

124 844 547 458 958 124 844 547 458 958 Hasil 213 120 321 621 124 342 844 547 458 958 Iterasi ketiga Data Kelompok 0 7 8 9 213 213 120 120 321 321 621 621 124 124 342 342 844 844 547 547 458 458 958 958 Hasil 120 124 213 321 342 458 547 621 844 958 Iterasi selesai. Maka data terurut adalah 120, 124, 213, 321, 342, 458, 547, 621, 844, 958 2.2.7 Metode MergeSort Metode yang akan dijelaskan biasanya disebut dengan metode MergeSort Dua Arah (Two-way MergeSort). Metode ini memanfaatkan keteraturan yang diperoleh dari hasil merging dua buah vektor Secara singkat dapat dijelaskan sebagai berikut. Vektor masukan dianggap yang mempunyai N eleman dianggap sebagai N buah vektor yang masing-masing terdiri dari sebuah vektor. Untuk setiap pasang vektor kita lakukan proses merging sehingga akan kita peroleh N/2 vektor yang masing-masing terdiri dari 2 elemen (jika N ganjil, akan terdapat sebuah vektor dengan 1 elemen). Kemudian dilakukan merging kembali untuk setiap pasang vektor, sehingga kita peroleh N/4 vektor. Langkah ini kita teruskan sampai kita memperoleh sebuah vektor yang sudah dalam keadaan urut. 24

Contoh : Data yang akan diurutkan adalah: 15 12 45 56 13 10 43 34 56 65 15 12 45 56 13 10 43 34 56 65 12 15 45 56 10 13 34 43 56 65 12 15 45 56 10 13 34 43 56 65 10 12 13 15 34 43 45 56 56 65 10 12 13 15 34 43 45 56 56 65 gambar 1. ilustrasi metode mergesort algoritma yang kita gunakan adalah algoritma merging : 1. input Ca, Cb (banyak elemen pada vektor) 2. inisialisasi i =1, j =1 dan Cc =0 3. repeat apakah Ai < Bj ya, CCc = Ai, dan i = i+1 tdk, CCc = Bj, dan j = j+1 until i > Ca atau j > Cb 4. apakah i > Ca ya, untuk k = j.. Cb Cc = Cc +1 dan CCc = Bk tdk, untuk k = i.. Ca Cc = Cc + 1 dan CCc = Ak 5. selesai 25

2.2.8 Metode Treesort Metoda treesort adalah suatu metoda yang juga bisa digunakan untuk mengurutkan data. Pada Bab VII Struktur pohon telah dibahas bagaimana menyusun sebuah pohon dan melakukan kunjungan untuk memperoleh informasi yang tersimpan dalam pohon dan sesuai dengan macam kunjungan yang dilakukan. Pada dasarnya dalam pembentukan sebuah pohon perlu diperhatikan kapan suatu simpul akan dipakai sebagai cabang kiri dan kapan sebagai cabang kanan. Pada makalah ini kami menggunakan salah satu aturan yaitu informasi yang tersimpan pada cabang kiri nilainya selalu lebih kecil dari simpul akar dan informasi yang tersimpan dalam simpul akar nilainya selalu lebih besar dari yang tersimpan pada cabang kanan. Dalam penyusunan pohon ini kita dapat melakukannya dengan kunjungan inorder. Kunjungan inorder ini juga telah dibahas pada struktur pohon yaitu dengan cara : - kunjungi cabang kiri - kunjungi cabang kanan - cetak isi simpul yang dikunjungi Penyusunan (pengurutan) dalam keadaan menaik dapat kita lakukan dengan LRO, dan sebaliknya dalam keadaan menurun dapat dilakukan dengan RLO. Pada contoh pohon dibawah kami menggunakan kunjungan inorder yang dapat menghasilkan informasi dalam keadaan terurut. Dari pohon tersebut,didapat urutan yang berisi ABCDEFGHIJKLMNOPQ dengan LRO dan akan diperoleh urutan QPONMLKJIHGFEDCBA. I G M C H K N B E J L P A D F O Q gambar 9.12. Contoh pohon untuk TreeSort 26

27