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

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

Outline STRUKTUR DATA. VII. Sorting

Sorting Algorithms. Algoritma dan Struktur Data. Sorting algorithms

Quick Sort dan Merge Sort. Arna Fariza Yuliana Setiowati

Sorting Algorithms. Divide and Conquer

SORTING DENGAN ALGORITMA DIVIDE AND CONQUER

SORTING (BAGIAN II) Proses kelima

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

Sorting Algorithms. Buble Sort

ALGORITMA PENGURUTAN. Oleh : S. Thya Safitri, MT

Simple Sorting Techniques

Algoritma Bubble Sort dan Quick Sort

Analisis Kecepatan Sorting Dengan Notasi Big O

Struktur Data & Algoritme (Data Structures & Algorithms)

Objectives. Struktur Data & Algoritme (Data Structures & Algorithms) Outline. Apa itu Recursion? Recursion

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

Algoritma dan Struktur Data. Algoritma Pengurutan (Sorting)

Sorting Algorithms. Definisi

Outline. Struktur Data & Algoritme (Data Structures & Algorithms) Pengantar. Definisi. 2-3 Trees

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

Review. Struktur Data & Algoritme (Data Structures & Algorithms) Objectives. Outline. Stacks & Queues

Studi Mengenai Perbandingan Sorting Algorithmics Dalam Pemrograman dan Kompleksitasnya

Bubble Sort dan Shell-Sort. Yuliana Setiowati

Struktur Data & Algoritme (Data Structures & Algorithms)

Struktur Data dan Algoritme. Struktur Data & Algoritme (Data Structures & Algorithms) Struktur Data dan Algoritme. Objectives.

ALGORITMA PENGURUTAN & PENCARIAN

Politeknik Elektronika Negeri Surabaya

Analisis Algoritma Bubble Sort

STRUKTUR DATA SORTING ARRAY

Politeknik Elektronika Negeri Surabaya

Struktur Data & Algoritme (Data Structures & Algorithms)

Algoritma Sorting (Selection Insertion)

STRATEGI DIVIDE AND CONQUER

METODE DEVIDE AND CONQUER (DANDC)

Adam Mukharil Bachtiar English Class Informatics Engineering Algorithms and Programming Searching

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

Pengertian Algoritma Pengurutan

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

STRUKTUR DATA (3) sorting array. M.Cs

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

ANALISIS PERBANDINGAN ALGORITMA SELECTION SORT DENGAN MERGE SORT

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

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

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

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

Kompleksitas Algoritma Sorting yang Populer Dipakai

BAHASA PEMROGRAMAN 1 (PERTEMUAN 3)

Politeknik Elektronika Negeri Surabaya

Politeknik Elektronika Negeri Surabaya

STRUKTUR DATA. Nama : Sulfikar Npm : STMIK Handayani Makassar

Pemrograman Lanjut. Interface

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

Politeknik Elektronika Negeri Surabaya

Algoritma dan Struktur Data. Searching dan Sorting

1/5. while and do Loops The remaining types of loops are while and do. As with for loops, while and do loops Praktikum Alpro Modul 3.

Kompleksitas Algoritma Dalam Algoritma Pengurutan

BAB 2 LANDASAN TEORI

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

Politeknik Elektronika Negeri Surabaya

BAB I PENDAHULUAN Latar Belakang

Gambar 13.1 Ilustrasi proses algoritma sorting

BAB 8 SORTING DAN SEARCHING

Algoritme dan Pemrograman

ANALISIS ALGORITMA BINARY SEARCH

Modul Praktikum 6 Pemograman Berorientasi Objek

7. SORTING DAN SEARCHING

BAB 2 LANDASAN TEORI

Analisis Kompleksitas Waktu Untuk Beberapa Algoritma Pengurutan

MODUL PRAKTIKUM STRUKTUR DATA DAN ALGORITMA GENERIC DAN IMPLEMENTASI COMPARETO()

NASKAH UJIAN UTAMA. JENJANG/PROG. STUDI : DIPLOMA TIGA / MANAJEMEN INFORMATIKA HARI / TANGGAL : Kamis / 18 FEBRUARI 2016

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

BAB 2 LANDASAN TEORI

Struktur Data & Algoritme (Data Structures & Algorithms)

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

MODUL PRAKTIKUM STRUKTUR DATA DAN ALGORITMA QUEUE

Analisis Perbandingan Kompleksitas Algoritma Pengurutan Nilai (Sorting)

MENYIGI PENGGUNAAN METODE SHELLSORT DALAM PENGURUTAN DATA

2. Definisi Masalah Masalah yang akan dibahas dalam paper ini adalah mengetahui Comparison based

SEARCHING & SORTING. Pendahuluan

Bab Tujuan. 6.2 Insertion Sort

JURNAL TEKNOLOGI INFORMASI & PENDIDIKAN ISSN : VOL. 6 NO. 1 Maret 2013

Data Structures. Class 4 Arrays. Pengampu : TATI ERLINA, M.I.T. Copyright 2006 by The McGraw-Hill Companies, Inc. All rights reserved.

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

DIKTAT STRUKTUR DATA Oleh: Tim Struktur Data IF

Struktur Data & Algoritma

BAB 2 TINJAUAN PUSTAKA

Analisis Perbandingan Kompleksitas Algoritma Pengurutan Nilai (Sorting)

Algoritma Divide and Conquer

IKI 20100: Struktur Data & Algoritma

Struktur Data dan Algoritma

Struktur Data & Algoritme (Data Structures & Algorithms)

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

ABSTRACT. Keyword: Algorithm, Depth First Search, Breadth First Search, backtracking, Maze, Rat Race, Web Peta. Universitas Kristen Maranatha

Recursion Properties. Factorial: MaxSubseqSum Recursive version. MaxSubseqSum Recursive version

12/26/2011 ILKOM IPB 1. Algoritme dan Pemrograman. Sorting. Data untuk sorting. Contoh. Algoritme #1: BUBBLE SORT.

A. TUJUAN PEMBELAJARAN

SORTING. Brigida Arie Minartiningtyas, M.Kom

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

A. TUJUAN PEMBELAJARAN

Transkripsi:

Struktur Data & Algoritme (Data Structures & Algorithms) Objectives Memahami beberapa algoritme sorting dan dapat menganalisa kompleksitas-nya Sorting Denny (denny@cs.ui.ac.id) Suryana Setiawan (setiawan@cs.ui.ac.id) Fakultas Ilmu Komputer Universitas Indonesia Semester Genap - 00/005 Version.0 - Internal Use Only SDA/SORT/V.0/ Outline Beberapa algoritme untuk melakukan sorting Idea Example Running time for each algorithm Sort Sorting = pengurutan Sorted = terurut menurut kaidah tertentu Data pada umumnya disajikan dalam bentuk sorted. Why? Bayangkan bagaimana mencari telepon seorang teman dalam buku yang disimpan tidak terurut. SDA/SORT/V.0/ SDA/SORT/V.0/ Bubble Sort: idea bubble = busa/udara dalam air, so? Busa dalam air akan naik ke atas. Why? How? Ketika busa naik ke atas, maka air yang di atasnya akan turun memenuhi tempat bekas busa tersebut. Bubble Sort 1 0 1 65 0-1 58 1 0 0-1 58 65 1 0 0-1 58 65 1 0-1 0 58 65 SDA/SORT/V.0/5 Perhatikan bahwa pada setiap iterasi, dapat dipastikan satu elemen akan menempati tempat yang benar SDA/SORT/V.0/6 1

Bubble Sort 5 1 0-1 0 58 65 6 1 0-1 0 58 65 7 0-1 1 0 58 65 8-1 0 1 0 58 65 Stop here why? Bubble Sort: algorithms Algorithm (see jdk1.5.0_01\demo\applets\sortdemo) void sort(int a[]) throws Exception for (int i = a.length; --i>=0; ) 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; SDA/SORT/V.0/7 SDA/SORT/V.0/8 Bubble Sort Running time: Worst case: O(n ) Best case: O(n) -- when? why? Variant: bi-directional bubble sort original bubble sort: hanya bergerak ke satu arah bi-directional bubble sort bergerak dua arah (bolak balik). see jdk1.5.0_01\demo\applets\sortdemo Selection Sort: idea Ambil yang terbaik (select) dari suatu kelompok, kemudian diletakkan di belakang barisan Lakukan terus sampai kelompok tersebut habis SDA/SORT/V.0/9 SDA/SORT/V.0/10 Selection Sort Selection Sort 0 1 65 0-1 58 0 1 0-1 58 65 0 1 0-1 58 65 0 1 0-1 58 65 0 1 0-1 58 65-1 1 0 0 58 65-1 1 0 0 58 65-1 1 0 0 58 65 SDA/SORT/V.0/11 SDA/SORT/V.0/1

Selection Sort -1 1 0 0 58 65-1 0 1 0 58 65-1 0 1 0 58 65-1 0 1 0 58 65-1 0 1 0 58 65 Selection: algoritme void sort(int a[]) throws Exception for (int i = 0; i < a.length; i++) int min = i; int j; /* Find the smallest element in the unsorted list for (j = i + 1; j < a.length; j++) if (a[j] < a[min]) min = j; SDA/SORT/V.0/1 SDA/SORT/V.0/1 Selection: algoritme () Selection Sort: analysis /* Swap the smallest unsorted element into the end of the sorted list. int T = a[min]; a[min] = a[i]; a[i] = T; Running time: Worst case: O(n ) Best case: O(n ) Based on big-oh analysis, is selection sort better than bubble sort? Does the actual running time reflect the analysis? SDA/SORT/V.0/15 SDA/SORT/V.0/16 Idea: mengurutkan kartu-kartu 0 1 65 0-1 58 1 0 65 0-1 58 0 1 65 0-1 58 1 0 65 0-1 58 1 0 65 0-1 58 1 0 65 0-1 58 SDA/SORT/V.0/17 SDA/SORT/V.0/18

1 0 0 65 58 65 1 0 65 0-1 58 1 0 65 0 58 65 58 65 0 1 0 65-1 58 1 0 65 0 65 58 65 1 0 0 65 65 58 1 0 65 0 65 58 65 58 65 SDA/SORT/V.0/19 SDA/SORT/V.0/0 : ineffecient version Insertion sort untuk mengurutkan array integer public static void insertionsort (int[] a) for (int ii = 1; ii < a.length; ii++) int jj = ii; while (( jj > 0) && (a[jj] < a[jj - 1])) int temp = a[jj]; a[jj] = a[jj - 1]; a[jj - 1] = temp; jj--; Perhatikan: ternyata nilai di a[jj] selalu sama dapat dilakukan efisiensi di sini. Insertion sort yang lebih efisien public static void insertionsort (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; SDA/SORT/V.0/1 SDA/SORT/V.0/ Running time analysis: Worst case: O(n ) Best case: O(n) Is insertion sort faster than selection sort? Notice the similarity and the difference between insertion sort and selection sort. Mergesort Divide and Conquer approach Idea: Merging two sorted array takes O(n) time Split an array into two takes O(1) time 1 0 65-1 0 58 SDA/SORT/V.0/ SDA/SORT/V.0/

Mergesort: Algorithm If the number of items to sort is 0 or 1, return. Recursively sort the first and second half separately. Merge the two sorted halves into a sorted group. Mergesort 0 1 65 0-1 58 0 1 65 0-1 58 split 0 1 65 0-1 58 0 1 65 0-1 58 SDA/SORT/V.0/5 SDA/SORT/V.0/6 Mergesort Mergesort 0 1 65 0-1 58 split 1 0 65-1 0 58 1 65-1 58 1 0 65-1 0 58 merge 0 1 65 0-1 58 merge -1 0 1 0 58 6 1 0 65-1 0 58 SDA/SORT/V.0/7 SDA/SORT/V.0/8 Merge Sort: implementation Implement operation to merge two sorted arrays into one sorted array! public static void merge (int [] array, int lo, int high) // assume: // mid = (lo + high) / ; // array [lo..mid] and [mid+1..high] are sorted Merge Sort: implementation There are two ways to merge two sorted array: in place merging using extra place merging SDA/SORT/V.0/9 SDA/SORT/V.0/0 5

Merge Sort: analysis Running Time: O(n log n) Why? Quicksort Divide and Conquer approach Quicksort(S) algorithm: If the number of items in S is 0 or 1, return. Pick any element v in S. This element is called the pivot. Partition S v into two disjoint groups: L = x S v x v and R = x S v x v Return the result of Quicksort(L), followed by v, followed by Quicksort(R). SDA/SORT/V.0/1 SDA/SORT/V.0/ Quicksort: select pivot Quicksort: partition 0 58 0 65 1-1 0 0-1 58 1 65 SDA/SORT/V.0/ SDA/SORT/V.0/ Quicksort: recursive sort & merge the results Quicksort: partition algorithm 1-1 0 1 0 58 65 0 1 65 0-1 58 1 65 0-1 58 0-1 0 1 0 58 65 1 0 65 0-1 58 SDA/SORT/V.0/5 SDA/SORT/V.0/6 6

Quicksort: partition algorithm 1 Quicksort: partition algorithm 1 0 1 65 0-1 58 1-1 0 0 58 65 1 65 0-1 58 0 1 0 0-1 58 65 0 1-1 58 65-1 0 1 65-1 1 1-1 0 0 58 65 1-1 0 0 58 65-1 0 1 0 58 65 SDA/SORT/V.0/7 SDA/SORT/V.0/8 Quicksort: partition algorithm Quicksort: partition algorithm original 0 1 65 0-1 58 1 65 0-1 58 0 pivot = 0 ++ while < pivot -- while >= pivot 1 65 0-1 58 0 1-1 0 65 58 0 1 65 0-1 58 0 1-1 0 65 58 0 1 65 0-1 58 0 sort CROSSING! sort SDA/SORT/V.0/9 SDA/SORT/V.0/0 Quicksort: algoritme static void QuickSort(int a[], int lo0, int hi0) int lo = lo0; int hi = hi0; int pivot; // base case if ( hi0 <= lo0) return; pivot = a[lo0]; // loop through the array until indices cross while( lo <= hi ) /* find the first element that is greater than or equal to the partition element starting from the Index. while( ( lo < hi0 ) && ( a[lo] < pivot )) ++lo; /* find an element that is smaller than the partition element starting from the Index. while( ( hi > lo0 ) && ( a[hi] >= pivot )) --hi; SDA/SORT/V.0/1 // if the indexes have not crossed, swap if( lo <= hi ) swap(a, lo, hi); ++lo; --hi; SDA/SORT/V.0/ 7

/* If the index has not reached the side of array must now sort the partition. if (lo0 < hi) QuickSort( a, lo0, hi ); /* If the index has not reached the side of array must now sort the partition. if( lo < hi0 ) QuickSort( a, lo, hi0 ); Quicksort: analysis Partitioning takes O(n) Merging takes O(1) So, for each recursive call, the algorithm takes O(n) How many recursive calls does a quick sort need? SDA/SORT/V.0/ SDA/SORT/V.0/ Quicksort: selecting pivot Ideal pivot: median element Common pivot First element Element at the middle Median of three Shellsort Original: 0 1 65 0-1 58 5-sort: Sort setiap item yang berjarak 5: 0 1 65 0-1 58 SDA/SORT/V.0/5 SDA/SORT/V.0/6 Shellsort Original: 0 1 65 0-1 58 After 5-sort: 0 0-1 1 58 65 After -sort: 0-1 1 0 65 58 After 1-sort: 1 0 65 0 65 58 65 58 65 Performance of Shellsort Insertion Shellsort N Sort Shell's Odd Gaps Only Dividing by. 1000 1 11 11 9 000 8 6 1 000 196 61 59 5 8000 7950 15 11 11 16000 560 58 69 000 11911 869 75 575 6000 50000 091 1705 19 O(N / ) O(N 5/ ) O(N 7/6 ) SDA/SORT/V.0/7 SDA/SORT/V.0/8 8

Generic Sort Bagaimana jika diperlukan method untuk mengurutkan array dari String, array dari Lingkaran (berdasarkan radiusnya)? Apakah mungkin dibuat suatu method yang bisa dipakai untuk semua jenis object? Ternyata supaya object bisa diurutkan, harus bisa dibandingkan dengan object lainnya (mempunyai behavior bisa dibandingkan - comparable method). Solusinya: Gunakan interface yang mengandung method yang dapat membandingkan dua buah object. Generic Sort REVIEW: Suatu kelas yang meng-implements sebuah interface, berarti kelas tersebut mewarisi interface (definisi method-method) = interface inheritance, bukan implementation inheritance Dalam Java, terdapat interface java.lang.comparable method: int compareto (Object o) SDA/SORT/V.0/9 SDA/SORT/V.0/50 Other kinds of sort Heap sort. We will discuss this after tree. Postman sort / Radix Sort. etc. Further Reading http://telaga.cs.ui.ac.id/webkuliah/iki101 00/resources/animation/ Chapter 8: Sorting Algorithm SDA/SORT/V.0/51 SDA/SORT/V.0/5 What s Next Recursive (Chapter 7) SDA/SORT/V.0/5 9