Algoritma dan Pemrograman 2 PENGURUTAN

dokumen-dokumen yang mirip
Algoritma dan Pemrograman 2 PENGURUTAN

Algoritma dan Pemrograman 2 PENCARIAN

Searching [pencarian] Algoritma Pemrograman

Pengurutan (Sorting) Algoritma Pemrograman

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

Kuliah ke : 4 Algoritma & Stuktur Data. Pengurutan (Sorting)

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

Kompleksitas Algoritma (1)

DIKTAT STRUKTUR DATA Oleh: Tim Struktur Data IF

Pencarian. 1. Memahami konsep pencarian 2. Mengenal beberapa algoritma pencarian 3. Menerapkan algoritma pencarian dalam program

Kompleksitas Algoritma

ALGORITMA PENGURUTAN & PENCARIAN

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

MODUL IV PENCARIAN DAN PENGURUTAN

BAB V SORTING (PENGURUTAN) INTERNAL

Algoritma dan Pemrograman Searching/Pencarian

PENCARIAN BERUNTUN (SEQUENTIAL SEARCHING)

c. Hasil pencarian berupa nilai Boolean yang menyatakan status hasil pencarian. Versi 1 (Pembandingan elemen dilakukan sebagai kondisi pengulangan)

ALGORITMA DAN PEMROGRAMAN 2. 3 SKS By : Sri Rezeki Candra Nursari

1. Kompetensi Mengenal dan memahami algoritma percabangan yang komplek.

Kompleksitas Algoritma

Bubble Sort (Pengurutan Gelembung / Pemberatan)

Algoritma Shell Sort Ascending Dan Binary Sequential Search Menggunakan C

SORTING. Struktur Data S1 Sistem Informasi. Ld.Farida

Algoritma Brute Force (Bagian 1) Oleh: Rinaldi Munir

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

AnalisisFramework. Mengukur ukuran atau jumlah input Mengukur waktu eksekusi Tingkat pertumbuhan Efiesiensi worst-case, best-case dan average-case

Algoritma Brute Force

BAB VI SEARCHING (PENCARIAN)

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

REVIEW ARRAY. Institut Teknologi Sumatera

PERTEMUAN 9-11 STATEMENT

Sorting. Pertemuan ke 14.

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

CCH1A4 / Dasar Algoritma & Pemrogramanan

BAB VI Pengurutan (Sorting)

SOAL C++ Created by Yuli Astuti,S.Kom Copyright 2009

AlgoritmaBrute Force. Desain dan Analisis Algoritma (CS3024)

PENGULANGAN. pencacah harus bertipe integer atau karakter pernyataan adalah satu atau lebih instruksi yang. Pernyataan

1 Pencarian. 1.1 Tinjauan Singkat Larik

Praktikum 7. Pengurutan (Sorting) Insertion Sort, Selection Sort POKOK BAHASAN: TUJUAN BELAJAR: DASAR TEORI:

SORTING. Brigida Arie Minartiningtyas, M.Kom

PERBANDINGAN KOMPLEKSITAS ALGORITMA PENCARIAN BINER DAN ALGORITMA PENCARIAN BERUNTUN

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

Pernyataan FOR Pernyataan WHILE Pernyataan REPEAT. Dewi Sartika,M.Kom

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

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

Materi Praktikum Algoritma dan Pemrograman II Sorting Algorithm (Algoritma Pengurutan)

DASAR PEMROGRAMAN. Institut Teknologi Sumatera

STRUKTUR DASAR ALGORITMA DAN PEMROGRAMAN STMIK AMIKOM YOGYAKARTA

Array. Teknik Informatika Politeknik Negeri Batam

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

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

SEKOLAH TINGGI MANAJEMEN INFORMATIKA DAN KOMPUTER STMIK AMIKOM YOGYAKARTA

Sebuah algoritma tidak saja harus benar, tetapi juga harus mangkus (efisien). Algoritma yang bagus adalah algoritma yang mangkus.

Analisis Algoritma Knuth Morris Pratt dan Algoritma Boyer Moore dalam Proses Pencarian String

PENGANTAR KOMPUTER & SOFTWARE II. Array (Part II) Tim Pengajar KU Institut Teknologi Sumatera

ALGORITMA PENCARIAN. c. Hasil pencarian berupa nilai Boolean yang menyatakan status hasil pencarian.

A. TUJUAN PEMBELAJARAN

Pengurutan (Sorting)

CCH1A4 / Dasar Algoritma & Pemrogramanan

ARRAY PENGANTAR PROGRAM STUDI. Institut Teknologi Sumatera

Algoritma dan Pemrograman

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

1. Inggriani Liem Catatan Kuliah Algoritma & Pemrograman, Jurusan Teknik Informatika ITB

Analisis Algoritm. Fundamentals of the Anlysis of Algorithm Efficiency

PERSEGI ANGKA-HURUF VERTIKAL

STRUKTUR DATA. Nama : Sulfikar Npm : STMIK Handayani Makassar

LAPORAN PRAKTIKUM SEMENTARA ALGORITMA & STRUKTUR DATA 1

PSEUDOCODE TIPE DATA, VARIABEL, DAN OPERATOR

Algoritma Pencarian String dalam Pemilihan Anggota Sebuah Organisasi

Selamat Mengerjakan. 2. Keluaran dari baris 10 adalah? a. 1 b. 4 c. 2.5 d. 2 e Keluaran dari baris 11 adalah? a. 1 b. 4 c. 2.5 d. 2 e.

Kompleksitas Algoritma

BAB XI ARRAY (LARIK)

ALGORITMA RINTA KRIDALUKMANA SISKOM UNDIP

Algoritma Divide and Conquer (Bagian 1)

Politeknik Elektronika Negeri Surabaya

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

*** SELAMAT MENGERJAKAN

Bab 8 Array. x=a[9]; Untuk memasukkan data ke dalam array, sintak yang digunakan adalah : a[nomor_elemen] = data;

Pertemuan XII ALGORITMA. Algoritma & Pemrograman Ken Kinanti P 1. {Pencarian Beruntun / Sequential Search}

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

SORTING (PENGURUTAN DATA)

Pert 3: Algoritma Pemrograman 1 (Alpro1) 4 sks. By. Rita Wiryasaputra, ST., M. Cs.

ARRAY / LARIK. Oleh : Agus Priyanto, M.Kom SEKOLAH TINGGI TEKNOLOGI TELEMATIKA TELKOM. Smart, Trustworthy, And Teamwork

Algoritma & Pemrograman

ALGORITMA PENGURUTAN. Oleh : S. Thya Safitri, MT

Kompleksitas Algoritma

Matematika Diskrit Kompleksitas Algoritma. Instruktur : Ferry Wahyu Wibowo, S.Si., M.Cs.

PENGAKSESAN BERKAS (FILE) DALAM C

Array dan Matriks. IF2121 / Algoritma dan Struktur Data Sem / /7/2017 IF2121/sem /2018 1

LOGIKA ALGORITMA. Pertemuan 6. By: Augury

PENGULANGAN Bagian 1 : Notasi. Tim Pengajar KU1071 Sem

Sorting Algorithms. Buble Sort

Pertemuan 2 ARRAY DIMENSI 1 & 2

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

Algoritma dan Struktur Data. Algoritma Pengurutan (Sorting)

ALGORITMA & PEMROGRAMAN

Kompleksitas Algoritma Pengurutan Selection Sort dan Insertion Sort

ANALISIS PERBANDINGAN ALGORITMA SELECTION SORT DENGAN MERGE SORT

Transkripsi:

Algoritma dan Pemrograman 2 PENGURUTAN III. METODE PENGURUTAN SISIPAN (INSERTION SORT) Metode ini melakukan pengurutan dengan cara menyisipkan elemen array pada posisi yang tepat. Pencarian posisi yang tepat dilakukan dengan menyisir larik. Selama penyisiran, dilakukan pergeseran elemen array. Algoritma pengurutan sisipan untuk pengurutan menaik Untuk mendapatkan array yang terurut menaik, algoritma pengurutan sisipan secara garis besar ditulis sbb: Jumlah elemen : N Indeks tetendah : 0 Indeks tertinggi : n = N - 1 L = 15 10 7 22 17 5 22 i = 0 1........ n Untuk setiap tahap i = 1, 3,, n ; lakukan: 1) x L[i] 2) sisipkan x pada tempat yang sesuai antara L[0] L[i] Jumlah penyisipan = N - 1 Rincian setiap tahap adalah sebagai berikut: TAHAP I: Mulai dari L[1] : Simpan nilai L[1] ke variabel x Geser masing-masing satu langkah ke kanan semua nilai yang ada disebelah kiri L[1] satu persatu apabila nilai tersebut lebih besar dari x Setelah itu sisipkan x dibekas tempat nilai yang terakhir digeser

Algoritma dan Pemrograman 3 TAHAP II: Dilanjutkan ke L[2] : Simpan nilai L[2] ke variabel x Geser masing-masing satu langkah ke kanan semua nilai yang ada disebelah kiri L[2] satu persatu apabila nilai tersebut lebih besar dari x Setelah itu sisipkan x dibekas tempat nilai yang terakhir digeser.. Demikian seterusnya untuk elemen berikutnya, dan terakhir L[6]. Sehingga untuk jumlah elemen = 7 maka ada 6 tahap proses. Algoritma penyisipan menaik dapat ditulis: procedure Insertion(input/output L : LarikInt, input n : integer) DEKLARASI i : integer Pencacah tahap j : integer Pencacah untuk penelusuran larik x : integer Peubah bantu ketemu : boolean Untuk menyatakan posisi penyisipan ditemukan DESKRIPSI for i 1 to n do x L[i] j i - 1 ketemu = false while((j 0) and (not ketemu)) do if x L[j] then L[j + 1] L[j] geser j j - 1 else ketemu true endif endwhile L[j + 1] x endfor Metode ini memerlukan banyak operasi pergeseran untuk tiap tahapnya sehingga kurang bagus untuk jumlah data yang banyak.

Algoritma dan Pemrograman 4 Program C++ untuk pengurutan sisipan menaik: /*Mengurutkan data dengan metode Penyisipan*/ #include<iostream.h> #define N 10 /*Jumlah data*/ void InsertionSort(int data[],int n); /*prototipe fungsi*/ void main(void) int i; int n=n-1; int data[]=20,10,32,100,60,12,70,25,45,65; cout<<"sebelum diurutkan :"<<endl; for(i=0;i<=n;i++) cout<<data[i]<<" "; cout<<endl; cout<<" "<<endl; InsertionSort(data,n); cout<<"setelah diurutkan"<<endl; for(i=0;i<=n;i++) cout<<data[i]<<" "; cout<<endl; void InsertionSort(int array1[],int n) int i,j,x; bool ketemu; for(i=1;i<=n;i++) x=array1[i]; j=i-1; ketemu=false; while((j>=0) && (!ketemu)) if(x<array1[j]) array1[j+1]=array1[j]; j=j-1; else ketemu=true; array1[j+1]=x; Contoh : Urutkan secara menaik elemen dari array sbb: A : 15 10 7 22 17 5 12 Index : 0 1 2 3 4 5 6

Algoritma dan Pemrograman 5 Mulai dari index 1 TAHAP I : 15 10 7 22 17 5 12 X = A[1] = 10 A[0] X, geser A[0] kekanan, proses selesai karena sudah sampai index 0 15 15 7 22 17 5 12 Sisipkan X menggantikan A[0] (index terakhir yg digeser) 10 15 7 22 17 5 12 Mulai dari index 2 TAHAP II : 10 15 7 22 17 5 12 X = A[2] = 7 A[1] X, geser A[1] kekanan 10 15 15 22 17 5 12 A[0] X, A[0] geser kekanan, proses selesai karena sudah sampai index 0 10 10 15 22 17 5 12 Sisipkan X menggantikan A[0] (index terakhir yg digeser) 7 10 15 22 17 5 12 Mulai dari index 3 TAHAP III : 7 10 15 22 17 5 12 X = A[3] = 22 A[2]! X, proses selesai, sisipkan X ke A[3] 7 10 15 22 17 5 12

Algoritma dan Pemrograman 6 Mulai dari index 4 TAHAP IV : 7 10 15 22 17 5 12 X = A[4] = 17 A[3] X, geser A[3] kekanan 7 10 15 22 22 5 12 A[2]! X, proses selesai, sisipka X ke A[3](terakhir digeser) 7 10 15 17 22 5 12 Mulai dari index 5 TAHAP V : 7 10 15 17 22 5 12 X = A[5] = 5 A[4] X, geser A[4] kekanan 7 10 15 17 22 22 12 A[3] X, geser A[3] kekanan 7 10 15 17 17 22 12 A[2] X, geser A[2] kekanan 7 10 15 15 17 22 12 A[1] X, geser A[1] kekanan 7 10 10 15 17 22 12 A[0] X, geser A[0] kekanan, proses selesai karena sudah sampai index 0 7 7 10 15 17 22 12 sisipka X ke A[0](terakhir digeser) 5 7 10 15 17 22 12

Algoritma dan Pemrograman 7 Mulai dari index 6 TAHAP VI : 5 7 10 15 17 22 12 X = A[6] = 12 A[5] X, geser A[5] kekanan 5 7 10 15 17 22 22 A[4] X, geser A[4] kekanan 5 7 10 15 17 17 22 A[3] X, geser A[3] kekanan 5 7 10 15 15 17 22 A[2]! X, proses selesai, sisipka X ke A[3](terakhir digeser) 5 7 10 12 15 17 22 IV. METODE PENGURUTAN SHELL Diberi nama sesuai dengan penemunya yaitu Donald Shell tahun 1959. Metode ini merupakan perbaikan terhadap metode pengurutan sisipan. Insertion sort mempunyai keunggulan bila data yang diurutkan sudah hampir urut. Tetapi untuk data yang urutannya terbalik atau banyak data yang berada didaerah berlawanan maka akan banyak sekali proses penggeseran. Untuk mengurangi pergeseran terlalu jauh maka larik diurutkan setiap k elemen dengan menggunakan metode pengurutan sisip( k dinamakan step atau increment), misal k=5. Selanjutnya digunakan nilai step yang lebih kecil, misal k=3, lalu diurut setiap 3 elemen. Begitu seterusnya sampai nilai k=1. Untuk menjelaskan metode ini, tinjaulah sebuah data sbb: A : 27 25 12 32 60 52 35 37 47 17 45 10 5 15 indek : 0 1 2 3 4 5 6 7 8 9 10 11 12 13

Algoritma dan Pemrograman 8 Pass 1 (step = 5) 27 25 12 32 60 52 35 37 47 17 45 10 5 15 0 1 2 3 4 5 6 7 8 9 10 11 12 13 27 52 45 27 45 52 25 35 10 10 25 35 12 37 5 5 12 37 32 47 15 15 32 47 60 17 17 60 27 10 5 15 17 45 25 12 32 60 52 35 37 47 0 1 2 3 4 5 6 7 8 9 10 11 12 13 Hasil Pass 1 adalah : 27, 10, 5, 15, 17, 45, 25, 12, 32, 60, 52, 35, 37, 47

Algoritma dan Pemrograman 9 Pass 2 (step = 3) 27 10 5 15 17 45 25 12 32 60 52 35 37 47 0 1 2 3 4 5 6 7 8 9 10 11 12 13 27 15 25 60 37 15 25 27 37 60 10 17 12 52 47 10 12 17 47 52 5 45 32 35 5 32 35 45 15 10 5 25 12 32 27 17 35 37 47 45 60 52 0 1 2 3 4 5 6 7 8 9 10 11 12 13 Hasil pass 2 adalah : 15, 10, 5, 25, 12, 32, 27, 17, 35, 37, 47, 45, 60, 52 Terlihat bahwa hampir semua nilai kecil berada di bagian kiri, sehingga pada pass terakhir dapat dilakukan pengurutan metode sisipan untuk seluruh data dengan lebih efisien Pass 1 (step = 1) 15 10 5 25 12 32 27 17 35 37 47 45 60 52 Hasilnya : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 5 10 12 15 17 25 27 32 35 37 45 47 52 60 Diselesaikan dengan metode Insertion Sort biasa 0 1 2 3 4 5 6 7 8 9 10 11 12 13

Algoritma dan Pemrograman 10 Notasi Algoritmik : procedure Insertion(input/output L : LarikInt, input n, start, step : integer) DEKLARASI i : integer Pencacah tahap j : integer Pencacah untuk penelusuran larik x : integer Peubah bantu ketemu : boolean Untuk menyatakan posisi penyisipan ditemukan DESKRIPSI i start + step while i n do x L[i] j i - step ketemu = false while((j 0) and (not ketemu)) do if x L[j] then L[j + step] L[j] geser j j - step else ketemu true endif endwhile L[j + step] x endwhile procedure Shell(input/output L : LarikInt, input n : integer) DEKLARASI step, start : integer DESKRIPSI step 5 while step = 1 do for start 0 to step do Insertion(L, n, start, step) endfor step step - 2 endwhile

Algoritma dan Pemrograman 11 Program C++ : #include<iostream.h> #define N 10 /*Jumlah data*/ void InsertionSort(int data[],int n,int start,int step); void ShellSort(int data[],int n); void main(void) int i, n=n-1; int data[]=20,10,32,100,60,12,70,25,45,65; cout<<"sebelum diurutkan :"<<endl; for(i=0;i<=n;i++)cout<<data[i]<<" "; cout<<endl; cout<<" "<<endl; ShellSort(data,n); cout<<"setelah diurutkan"<<endl; for(i=0;i<=n;i++)cout<<data[i]<<" "; cout<<endl; void ShellSort(int data[],int n) int start,step; for(step=5;step>=1;step-=2) for(start=0; start<=step;start++) InsertionSort(data,n,start,step); void InsertionSort(int data[],int n, int start, int step) int i,j,x; bool ketemu; i=start+step; while(i<=n) x=data[i]; j=i-step; ketemu=false; while((j>=0) && (!ketemu)) if(x<data[j]) data[j+step]=data[j]; j=j-step; else ketemu=true; data[j+step]=x; i=i+step;

Algoritma dan Pemrograman 12 TUGAS 1. Buatlah program C++ untuk mengurutkan data berikut secara menurun dengan menggunakan metode Sisipan: A : 27 25 12 32 60 52 35 37 47 17 45 10 5 15 2. Buatlah program C++ untuk mengurutkan data berikut secara menurun dengan menggunakan metode Shell: A : 27 25 12 32 60 52 35 37 47 17 45 10 5 15