Sorting. Struktur Data dan Algoritma. Suryana Setiawan, Ruli Manurung & Ade Azurat (acknowledgments: Denny) Fasilkom UI

dokumen-dokumen yang mirip
Outline STRUKTUR DATA. VII. Sorting

Objectives. Struktur Data & Algoritme (Data Structures & Algorithms) Sort. Outline. Bubble Sort: idea. Bubble Sort. Sorting

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

Sorting Algorithms. Algoritma dan Struktur Data. Sorting algorithms

Quick Sort dan Merge Sort. Arna Fariza Yuliana Setiowati

Studi Mengenai Perbandingan Sorting Algorithmics Dalam Pemrograman dan Kompleksitasnya

Struktur Data dan Algoritma

Pengertian Algoritma Pengurutan

Algoritma Bubble Sort dan Quick Sort

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

Algoritma Sorting (Selection Insertion)

SORTING DENGAN ALGORITMA DIVIDE AND CONQUER

Algoritma dan Struktur Data. Algoritma Pengurutan (Sorting)

ALGORITMA PENGURUTAN & PENCARIAN

Politeknik Elektronika Negeri Surabaya

ALGORITMA PENGURUTAN. Oleh : S. Thya Safitri, MT

MODUL PRAKTIKUM STRUKTUR DATA DAN ALGORITMA BUBBLE SORT, SELECTION SORT, INSERTION SORT

STRATEGI DIVIDE AND CONQUER

Analisis Kecepatan Sorting Dengan Notasi Big O

Sorting Algorithms. Definisi

Bubble Sort dan Shell-Sort. Yuliana Setiowati

Sorting Algorithms. Divide and Conquer

Gambar 13.1 Ilustrasi proses algoritma sorting

STRUKTUR DATA SORTING ARRAY

Struktur Data dan Algoritma

Agar lebih mudah mengerti, cobalah untuk melakukan hal-hal berikut ini: 1. Bacalah terlebih dahulu ide dasar dari masing-masing algoritma.

STRUKTUR DATA. Nama : Sulfikar Npm : STMIK Handayani Makassar

SORTING (BAGIAN II) Proses kelima

Analisa dan Perancangan Algoritma. Ahmad Sabri, Dr Sesi 1: 9 Mei 2016

Politeknik Elektronika Negeri Surabaya

Kompleksitas Algoritma Sorting yang Populer Dipakai

Struktur Data & Algoritma

Politeknik Elektronika Negeri Surabaya

BAB VI Pengurutan (Sorting)

IKI 20100: Struktur Data & Algoritma

Kompleksitas Algoritma Dalam Algoritma Pengurutan

Modul Praktikum 6 Pemograman Berorientasi Objek

Struktur Data & Algoritma

SEARCHING & SORTING. Pendahuluan

Sorting Algorithms. Buble Sort

Algoritma dan Struktur Data. Searching dan Sorting

ANALISIS PERBANDINGAN ALGORITMA SELECTION SORT DENGAN MERGE SORT

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

STRUKTUR DATA (3) sorting array. M.Cs

Analisis Algoritma Bubble Sort

METODE DEVIDE AND CONQUER

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

7. SORTING DAN SEARCHING

BAB 2 LANDASAN TEORI

PERTEMUAN 10 METODE DEVIDE AND CONQUER

ANALISIS PERBANDINGAN ALGORITMA BUBBLE SORT, MERGE SORT, DAN QUICK SORT DALAM PROSES PENGURUTAN KOMBINASI ANGKA DAN HURUF

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

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

BAB 2 LANDASAN TEORI

BAB 8 SORTING DAN SEARCHING

Politeknik Elektronika Negeri Surabaya

BAB VI SORTIR ATAU PENGURUTAN

Kompleksitas Algoritma Pengurutan Selection Sort dan Insertion Sort

SORTING (PENGURUTAN DATA)

Gambar 1. Langkah-langkah pengurutan metode Insertion Sort (1)

PERTEMUAN 10 METODE DEVIDE AND CONQUER

A. TUJUAN PEMBELAJARAN

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

Algoritma Heap Sort. Sekolah Teknik Elektro & Informatika Departemen Teknik Informatika, Institut Teknologi Bandung Jl. Ganesha 10, Bandung

BAB 1 PENDAHULUAN. Universitas Sumatera Utara

BAB V SORT. Proses penukaran tidak dapat langsung dilakukan dengan cara : nilai[1] = nilai[2]; nilai[2] = nilai[1];

Algoritma Transposisi (Bubble Sort/pengurutan gelembung)

SORTING (Pengurutan)

Analisis Kompleksitas Waktu Untuk Beberapa Algoritma Pengurutan

Politeknik Elektronika Negeri Surabaya

Algoritme dan Pemrograman

Politeknik Elektronika Negeri Surabaya

Simple Sorting Techniques

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

Design and Analysis Algorithm. Ahmad Afif Supianto, S.Si., M.Kom. Pertemuan 07

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

BAB I PENDAHULUAN Latar Belakang

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

METODE DEVIDE AND CONQUER (DANDC)

Sorting. Selection Sort. Straight insertion Sort. Merge Sort Paradigma Divide-and-Conquer. Quicksort

Decrease and Conquer

Sorting. Pertemuan ke 14.

ANALISIS KOMPLEKSITAS ALGORITMA UNTUK BERBAGAI MACAM METODE PENCARIAN NILAI (SEARCHING) DAN PENGURUTAN NILAI (SORTING) PADA TABEL

ANALISIS ALGORITMA BINARY SEARCH

Bab Tujuan. 6.2 Insertion Sort

Kompleksitas Algoritma dalam Strategi Algoritma Sorting

ANALISA RUNNING TIME

BAHASA PEMROGRAMAN 1 (PERTEMUAN 3)

IKI 20100: Struktur Data & Algoritma

Struktur Data dan Algoritma

PENGURUTAN (SORTING) 1. Overview

Analisis Perbandingan Kompleksitas Algoritma Pengurutan Nilai (Sorting)

BAB 2 LANDASAN TEORI

BAB I PENDAHULUAN.

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

Perbandingan Performa Kombinasi Algoritma Pengurutan Quick-Insertion Sort dan Merge-Insertion Sort

Struktur Data dan Algoritma

IKI 20100: Struktur Data & Algoritma

Struktur Data dan Algoritma

Struktur Data & Algoritme (Data Structures & Algorithms)

Transkripsi:

Struktur Data dan Algoritma Sorting Suryana Setiawan, Ruli Manurung & Ade Azurat (acknowledgments: Denny) Fasilkom UI SUR HMM AA Fasilkom UI - IKI20100/ IKI80110P 2009/2010 Ganjil Minggu 5

Outline Beberapa algoritma untuk melakukan sorting: Bubble sort Selection sort Insertion sort Shell sort Merge sort Quick sort Untuk masing-masing algoritma: Ide dasar Contoh eksekusi Algoritma Analisa running time/kompleksitas 2

Sort Sorting = pengurutan Sorted = terurut menurut kaidah/aturan tertentu Data pada umumnya disajikan dalam bentuk sorted. Contoh: Nama di buku telpon Kata-kata dalam kamus File-file di dalam sebuah directory Indeks sebuah buku Data mutasi rekening tabungan CD di toko musik Bayangkan jika data di atas tidak terurut! 3

Bubble sort: Ide dasar Bubble = busa/udara dalam air apa yang terjadi? Busa dalam air akan naik ke atas. Mengapa? Ketika busa naik ke atas, maka air yang di atasnya akan turun memenuhi tempat bekas busa tersebut. Pada setiap iterasi, bandingkan elemen dengan sebelahnya: yang busa naik, yang air turun! 4

Bubble sort: Sebuah iterasi 40 2 40 2 1 40 1 43 3 43 3 65 0 65-1 0 65 58-1 58 65 3 65 42 3 42 65 4 65 4 5

Bubble sort: Iterasi berikutnya 1 40 2 1 43 3 65 0-1 58 3 42 4 2 2 1 40 3 43 0-1 58 3 42 4 65 3 1 2 3 40 0-1 43 3 42 4 58 65 4 1 2 3 0-1 40 3 42 4 43 58 65 Perhatikan bahwa pada setiap iterasi, dapat dipastikan satu elemen akan menempati tempat yang benar 6

Bubble sort: Terminasi algoritma 5 1 2 0-1 3 3 40 4 42 43 58 65 6 1 0-1 2 3 3 4 40 42 43 58 65 7 0-1 1 2 3 3 4 40 42 43 58 65 8-1 0 1 2 3 3 4 40 42 43 58 65 Berhenti di sini! Mengapa? 7

Bubble sort: Algoritma void sort(int a[]) throws Exception { for (int i = a.length; i>=0; i--) { boolean swapped = false; for (int j = 0; j<i; j++) {... if (a[j] > a[j+1]) { int T = a[j]; a[j] = a[j+1]; a[j+1] = T; swapped = true; }... } if (!swapped) return; } } 8

Bubble sort Running time: Worst case: O(n 2 ) Best case: O(n) kapan? Mengapa? Variasi: bi-directional bubble sort original bubble sort: hanya bergerak ke satu arah bi-directional bubble sort bergerak dua arah (bolak balik) 9

Selection sort: Ide dasar Kondisi awal: Unsorted list = data Sorted list = kosong Ambil yang terbaik (select) dari unsorted list, tambahkan di belakang sorted list. Lakukan terus sampai unsorted list habis. 10

Selection sort: Contoh 40 2 1 43 3 65 0-1 58 3 42 4 40 2 1 43 3 4 0-1 58 3 42 65 40 2 1 43 3 4 0-1 42 3 58 65 40 2 1 3 3 4 0-1 42 43 58 65 11

Selection sort: Contoh (lanj.) 40 2 1 3 3 4 0-1 42 43 58 65-1 2 1 3 3 4 0 40 42 43 58 65-1 2 1 3 3 0 4 40 42 43 58 65-1 2 1 0 3 3 4 40 42 43 58 65 12

Selection sort: Contoh (lanj.) -1 2 1 0 3 3 4 40 42 43 58 65-1 0 1 2 3 3 4 40 42 43 58 65-1 0 1 2 3 3 4 40 42 43 58 65-1 -1 0 1 2 3 3 4 40 42 43 58 65 0 1 2 3 3 4 40 42 43 58 65 13

Selection sort: Algoritma void sort(int a[]) throws Exception Cari elemen { terkecil dari for (int i = 0; i < a.length; i++) { int min = i; unsorted list. for (int j = i + 1; j < a.length; j++) if (a[j] < a[min]) min = j; } } int T = a[min]; a[min] = a[i]; a[i] = T; Pindahkan ke akhir sorted list. 14

Selection sort: Analisis Running time: Worst case: O(n 2 ) Best case: O(n 2 ) Berdasarkan analisis big-oh, apakah selection sort lebih baik dari bubble sort? Apakah running time yang sebenarnya merefleksikan analisis tersebut? 15

Insertion sort: Ide dasar Kondisi awal: Unsorted list = data Sorted list = kosong Ambil sembarang elemen dari unsorted list, sisipkan (insert) pada posisi yang benar dalam sorted list. Lakukan terus sampai unsorted list habis. Bayangkan anda mengurutkan kartu. 16

Insertion sort: Contoh 40 2 1 43 3 65 0-1 58 3 42 4 2 40 1 43 3 65 0-1 58 3 42 4 1 2 40 43 3 65 0-1 58 3 42 4 17

Insertion sort: Contoh (lanj.) 1 2 40 43 3 65 0-1 58 3 42 4 1 2 3 40 43 65 0-1 58 3 42 4 1 2 3 40 43 65 0-1 58 3 42 4 18

Insertion sort: Contoh (lanj.) 1 2 3 40 43 65 0-1 58 3 42 4 0 1 2 3 40 43 65-1 58 3 42 4-1 0 10 21 32 40 3 43 40 65 43 65 58 3 42 4 19

Insertion sort: Contoh (lanj.) -1 0 10 21 32 40 3 43 40 65 43 58 65 3 42 4-1 0 10 21 32 40 3 43 3 65 43 40 58 43 65 58 65 42 4-1 0 10 21 32 40 3 43 3 65 43 40 42 65 43 58 65 4-1 0 10 21 32 40 3 43 3 65 43 4 42 40 65 43 42 58 43 65 58 65 20

Insertion sort: Algoritma Insertion sort untuk mengurutkan array integer public static void insertionsort (int[] a) { for (int ii = 1; ii < a.length; ii++) { int jj = ii; } } unsorted while (( jj > 0) && (a[jj] < a[jj - 1])) list. { int temp = a[jj]; a[jj] = a[jj - 1]; a[jj - 1] = temp; jj--; } Ambil elemen pertama dalam Sisipkan ke dalam sorted list. Perhatikan: ternyata nilai di a[jj] selalu sama kita dapat melakukan efisiensi di sini! 21

Insertion sort: Algoritma (modif.) Insertion sort yang lebih efisien: public static void insertionsort2 (int[] a) { for (int ii = 1; ii < a.length; ii++) { int temp = a[ii]; int jj = ii; while (( jj > 0) && (temp < a[jj - 1])) { a[jj] = a[jj - 1]; jj--; } a[jj] = temp; } } 22

Insertion sort: Analisis Running time analysis: Worst case: O(n 2 ) Best case: O(n) Apakah insertion sort lebih cepat dari selection sort? Perhatikan persamaan dan perbedaan antara insertion sort dan selection sort. 23

Terhantam tembok kompleksitas Bubble sort, Selection sort, dan Insertion sort semua memiliki worst case sama: O(N 2 ). Ternyata, untuk algoritma manapun yang pada dasarnya menukar elemen bersebelahan (adjacent items), ini adalah best worst case : Ω(N 2 ) Dengan kata lain, disebut lower bound Bukti: Section 8.3 buku Weiss 24

Shell sort Ide Donald Shell (1959): Tukarlah elemen yang berjarak jauh! Original: 40 2 1 43 3 65 0-1 58 3 42 4 5-sort: Sort setiap item yang berjarak 5: 40 2 1 43 3 65 0-1 58 3 42 4 25

Shell sort Original: 40 2 1 43 3 65 0-1 58 3 42 4 After 5-sort: 40 0-1 43 3 42 2 1 58 3 65 4 After 3-sort: 2 0-1 3 1 4 40 3 42 43 65 58 After 1-sort: -1 0 10 21 32 40 3 43 3 65 43 4 42 40 65 43 42 58 43 65 58 65 26

Shell sort: Gap values Gap: jarak antara elemen yang di-sort. Seiring berjalannya waktu, gap diperkecil. Shell sort juga dikenal sebagai Diminishing Gap Sort. Shell mengusulkan mulai dengan ukuran awal gap = N/2, dan dibagi 2 setiap langkah. Ada banyak variasi pemilihan gap. 27

Kinerja Shell sort Insertion Shell sort N sort Shell's Nilai gap ganjil Dibagi 2.2 1000 122 11 11 9 2000 483 26 21 23 4000 1936 61 59 54 8000 7950 153 141 114 16000 32560 358 322 269 32000 131911 869 752 575 64000 520000 2091 1705 1249 O(N 3/2 ) O(N 5/4 ) O(N 7/6 ) Ada 3 nested loop, tetapi Shell sort masih lebih baik dari Insertion sort. Mengapa? 28

Merge sort: Ide dasar Divide and conquer approach Idenya: Menggabungkan (merge) 2 sorted array butuh waktu O(n) Membagi sebuah array jadi 2 hanya butuh waktu O(1) 1 2 3 40 43 65-1 0 3 4 42 58 Counter A Counter B -1 1 0 2 3 3 4 40 42 43 58 65 Counter c 29

Merge sort: Implementasi operasi merge Implementasikan method yang me-merge 2 sorted array ke dalam 1 sorted array! Asumsi: a dan b sudah ter-sort, c = a + b public static void merge (int[] a, int[] b, int[] c) { } Bisakah anda implementasikan tanpa perlu temporary space? 30

Merge sort: Algoritma rekursif Base case: jika jumlah elemen dalam array yang perlu di-sort adalah 0 atau 1. Recursive case: secara rekursif, sort bagian pertama dan kedua secara terpisah. Penggabungan: Merge 2 bagian yang sudah di-sort menjadi satu. 31

Merge sort: Contoh 40 2 1 43 3 65 0-1 58 3 42 4 40 2 1 43 3 65 0-1 58 3 42 4 40 2 1 43 3 65 0-1 58 3 42 4 split 40 2 1 43 3 65 0-1 58 3 42 4 32

Merge sort: Contoh (lanj.) 40 2 1 43 3 65 0-1 58 3 42 4 split 2 1 3 65-1 58 42 4 40 1 2 43 3 65 0-1 58 3 4 42 merge 1 2 40 3 43 65-1 0 58 3 4 42 33

Merge sort: Contoh (lanj.) 1 2 40 3 43 65-1 0 58 3 4 42 1 2 3 40 43 65-1 0 3 4 42 58 merge -1 0 1 2 3 3 4 40 42 43 58 62 34

Merge sort: Analisis Running Time: O(n log n) Mengapa? 35

Quick sort: Ide dasar Divide and conquer approach Algoritma quicksort(s): Jika jumlah elemen dalam S = 0 atau 1, return. Pilih sembarang elemen v S sebutlah pivot. Partisi S {v} ke dalam 2 bagian: L = {x S {v} x v} R = {x S {v} x v} Kembalikan nilai quicksort(s), diikuti v, diikuti quicksort(s). 36

Quick sort: Pilih elemen pivot 4 58-1 0 3 40 2 65 1 42 43 3 37

Quick sort: Partition 2 0 42 3 40 4-1 3 58 1 65 43 38

Quick sort: Sort scr. rekursif, gabungkan -1 0 1 2 3 3 4 40 42 43 58 65-1 0 1 2 3 3 4 40 42 43 58 65 39

Quick sort: Partition algorithm 1 40 2 1 43 3 65 0-1 58 3 42 4 left 4 2 1 43 3 65 0-1 58 3 42 40 right 4 2 1 40 3 65 0-1 58 3 42 43 40

Quick sort: Partition algorithm 1 4 2 1 3 3 65 0-1 58 40 42 43 4 2 1 3 3 40 0-1 58 65 42 43 4 2 1 3 3-1 0 40 58 65 42 43 4 2 1 3 3-1 0 40 58 65 42 43 left right 41

Quick sort: Partition algorithm 1 40 2 1 43 3 65 0-1 58 3 42 4 4 2 1 3 3-1 0 40 58 65 42 43 0 2 1 3 3-1 4 43 42 58 65-1 0 1 3 3 2 42 43 65-1 1 3 3 2 42 2 2 3 3 3 3-1 0 1 2 3 3 4 40 42 43 58 65 42

Quick sort: Partition algorithm 2 Original: pivot = 40 40 2 1 43 3 65 0-1 58 3 42 4 buang pivot sementara 4 2 1 43 3 65 0-1 58 3 42 40 while < pivot left++ while >= pivot right++ 4 4 2 1 43 3 65 0-1 58 3 42 left right 2 1 3 3 65 0-1 58 43 42 40 40 left right 43

Quick sort: Partition algorithm 2 4 4 4 2 1 3 3 65 0-1 58 43 42 left right 2 1 3 3-1 0 65 58 43 42 left right 2 1 3 3-1 0 65 58 43 42 40 40 40 sort (rekursif) right CROSSING! left sort (rekursif) 44

Quick sort: Implementasi static void quicksort(int a[], int low, int high) { if(high <= low) return; // base case pivot = choosepivot(a); // select best pivot int i=low, j=high-1; swap(a,pivot,a[j]); // move pivot out of the way while(i <= j) { // find large element starting from left while(i<high && a[i]<pivot) i++; // find small element starting from right while(j>low && a[j]>=pivot) j--; } // if the indexes have not crossed, swap if(i>j) swap(a, i, j); } swap(a,i,high-1); // restore pivot quicksort(a,low,i-1); // sort small elements quicksort(a,i+1,high); // sort large elements 45

Quick sort: Analisis Proses partitioning butuh waktu: O(n) Proses merging butuh waktu: O(1) Untuk setiap recursive call, algoritma quicksort butuh waktu: O(n) Pertanyaannya: berapa recursive call dibutuhkan untuk men-sort sebuah array? 46

Quick sort: Memilih pivot Pivot ideal: Elemen media Yang biasa dijadikan calon pivot: Elemen pertama Elemen terakhir Elemen di tengah-tengah Median dari ketiga elemen tsb. 47

Generic sort Semua algoritma yang telah kita lihat mensort int. Bagaimana jika kita ingin sort String? DataMhs? CD? Apa perlu dibuat method untuk setiap class? Tidak! Agar object bisa di-sort, mereka harus bisa dibandingkan dengan object lainnya (comparable). Solusinya: Gunakan interface yang mengandung method yang dapat membandingkan dua buah object. 48

Interface java.lang.comparable Dalam Java, sifat generik comparable didefinisikan dalam interface java.lang.comparable: public interface Comparable { public int compareto (Object ob); } Method compareto returns: <0: object (this) lebih kecil dari parameter ob 0: object (this) sama dengan parameter ob >0: object (this) lebih besar dari 49