24
Algoritma Pengurutan Algoritma Pencarian Dosen : Algoritma Pemrograman I Retno Hendrowati, MT Penulis : Sanhaji 115103005 Universitas Paramadina 2015

Makalah Algoritma Pengurutan Dan Pencarian

Embed Size (px)

DESCRIPTION

Makalah algoritma pengurutan

Citation preview

Page 1: Makalah Algoritma Pengurutan Dan Pencarian

Algoritma Pengurutan

Algoritma Pencarian

Dosen :

Algoritma Pemrograman I

Retno Hendrowati, MT

Penulis :

Sanhaji

115103005

Universitas Paramadina

2015

Page 2: Makalah Algoritma Pengurutan Dan Pencarian

DAFTAR ISI

Kata Pengantar................................................................................................................................... iBAB I ALGORITMA PENGURUTAN.............................................................................................1

A. ALGORITMA PENGURUTAN APUNG..........................................................................1

B. ALGORITMA PENGURUTAN SELEKSI.......................................................................2i. Algoritma Pengurutan Seleksi Maksimum.........................................................2

ii. Algoritma Pengurutan Seleksi Minimum.........................................................4

C. INSERTION SORT / METODE PENGURUTAN SISIP............................................5

D. SHELL SORT..........................................................................................................................7BAB II ALGORITMA PENCARIAN.................................................................................................9

A. Pencarian sekuensial (Sequential searching)..................................................9B. Pencarian Beruntun dengan Sentinel.................................................................12C. Pencarian Biner (binary search)............................................................................14

Page 3: Makalah Algoritma Pengurutan Dan Pencarian

Kata Pengantar

Puji syukur saya panjatkan kepada Allah swt. atas limpahan rahmat serta

hidayah inayahnya sehingga saya dapat menyelesaikan tugas makalah ini tanpa

suatu halangan yang berarti. Adapun tujuan dari penyusunan makalah yang

berjudul Algoritma pengurutan dan pencarian ini adalah sebagai pemenuhan tugas

yang diberikan demi tercapainya tujuan pembelajaran yang telah direncanakan.

Dan juga saya berterima kasih pada Ibu Retno Hendrowati, MT, selaku Dosen

mata kuliah Algoritma Pemrograman I yang telah memberikan tugas ini kepada

saya.

Saya menyadari dalam penyusunan makalah ini masih banyak kekurangan

dan jauh dari kesempurnaan. Maka dari itu, kritik dan saran yang membangun

sangat saya harapkan demi terciptanya makalah yang lebih baik selanjutnya.

Penulis

i

Page 4: Makalah Algoritma Pengurutan Dan Pencarian

BAB IALGORITMA PENGURUTAN

Dalam algoritma pengurutan ada beberapa cara tapi yang akan dibahas hanya empat, yaitu:

1. Metode Pengurutan apung ( Bubble Sort )2. Metode Pengurutan seleksi ( Selection Sort )3. Metode Pengurutan sisip ( Insertion Sort )4. Metode Pengurutan Shell ( Shell Sort)

A. ALGORITMA PENGURUTAN APUNG

Proses pengapungan ini dilakukan sebanyak n-1 langkah ( satu langkah disebut juga satu kali pass) dengan n adalah ukuran larik.

Untuk mendapatkan larik yang terurut menaik , algoritma pengurutan apung secara global sebagai berikut :- untuk setiap pass i= 1, 2, ..., n – 1, lakukan :- Mulai dari elemen k = n, n – 1, ..., i+1, lakukan:- Bandingkan L[k] dengan L[k – 1]- Pertukarkan L[k] dengan L[k – 1] jika L[k] < L[k – 1]

Procedure BubbleSort1(input/output L : LarikInt, input n: integer ){mengurutkan larik L[1..n] sehingga terurut menaik dengan metode pengurutan apung}k.awal : Elemen larik L sudah terdefinisi nilai – nilainyak.akhir : Elemen larik L terurut menaik sedemikian sehingga L[1] <=L[2]<=...<=L[n]

deklarasi

1

Page 5: Makalah Algoritma Pengurutan Dan Pencarian

i, k, temp : integerAlgoritma :For i←1 to n-1 do            For k←n downto i+1 do

If L[k] < L[k-1] then            temp ← L[k]            L[k] ← L[k – 1]            L[k – 1]← tempEndifendfor

endfor

Algoritma pengurutan apung tidak efficient disebabkan oleh banyaknya operasi pertukaran yanga dilakukan pada setiap langkahnya, tetapi kelebihannya ada pada kesederhanaanya dan mudah untuk dipahami.

B. ALGORITMA PENGURUTAN SELEKSI

Algoritma pengurutan ini memiliki gagasan dasar , yaitu : memilih elemen maksimun / minimum dari larik, lalu menempatkan elemen tersebut itu pada awal / akhir larik ( elemen terujung). Selanjutnya elemen terujung “diisolasi “ dan tidak disertakan pada proses selanjutnya.

i. Algoritma Pengurutan Seleksi Maksimum

Algoritma pengurutan untuk maksimum ditulis secara garis besar sebagai berikut :

- Jumlah pass = n-1- Untuk setiap pass i =1, 2, .., jumlah pass dilakukan :

# cari elemen terbesar (maks) mulai dari elemen ke – 1 sampai elemenke – n;

2

Page 6: Makalah Algoritma Pengurutan Dan Pencarian

# Pertukarkan maks dengan elemen ke – n;# Kurangi n satu ( karena elemen ke – n sudah terurut)

Procedure SelectionSort1(input/output L : LarikInt, input n : integer )k.awal : elemen larik L sudah terdefinisi harganyak.akhir : elemen larik L terurut menaik sedemikian sehingga L[1]<=L[2]<=... <= L[n]

deklarasii, j, imaks, maks, temp : integer

AlgoritmaFor i←n downto 2 do { jumlah pass sebanyak n-1}            {cari elemen maks pada L[1...i]            imaks ← 1 {elemen pertama diasumsikan sebagai maks}            maks ← L[1]            for j←2 to i do                        if L[j] > maks then                                    imaks←j                                    maks←L[j]                        endif            endfor{pertukarkan maks dengan L[i]}temp←L[i]L[i]←maksL[imaks]←tempEndfor

ii. Algoritma Pengurutan Seleksi Minimum

Procedure SelectionSort2 (input/output L : LarikInt, input n : interger)

3

Page 7: Makalah Algoritma Pengurutan Dan Pencarian

{mengurutkan elemen-elemen larik L[1..n] sehingga tersusun menurun dengan metode pengurutan seleksi minimum}

DEKLARASIi    : interger         {pencacah pass}j    : interger         {pencacah untuk mencari nilai maksimum}imin         : interger         {indeks yang berisi nilai minimu sementara}

ALGORITMAfor i ← n downto 2 do             {jumlah pass sebanyak n – 1 kali}{cari elemen terkecil pada elemen L[1..i]}            imin ←1                     for j ← 2 to i do                        if L[j] > L[imin] then                                    imin ← L[j]                        endif            endfor            {pertukaran L[imin] dengan L[i]}            Tukar (L[imin], L[i]);Endfor

C. INSERTION SORT / METODE PENGURUTAN SISIP

Salah satu algoritma sorting yang paling sederhana adalah insertion sort.Ide dari algoritma ini dapat dianalogikan seperti mengurutkan kartu.

4

Page 8: Makalah Algoritma Pengurutan Dan Pencarian

Penjelasan berikut ini menerangkan bagaimana algoritma insertion sort bekerja dalam pengurutan kartu. Anggaplah ingin mengurutkan satu set kartu dari kartu yang bernilai paling kecil hingga yang paling besar. Seluruh kartu diletakkan pada meja, sebutlah meja ini sebagai meja pertama, disusun dari kiri ke kanan dan atas kebawah. Kemudian kita mempunyai meja yang lain, meja kedua, dimana kartu yang diurutkan akan diletakkan. Ambil kartu pertama yang terletak pada pojok kiri atas meja pertama dan letakkan pada meja kedua.Ambil kartu kedua darimejapertama, bandingkan dengan kartu yang berada pada meja kedua, kemudian letakkan pada urutan yang sesuai setelah perbandingan. Proses tersebut akan berlangsung hingga seluruh kartu pada meja pertama telah diletakkan berurutan pada meja kedua.

Algoritma insertion sort pada dasarnya memilah data yang akan diurutkan menjadi dua bagian, yang belum diurutkan (meja pertama) dan yang sudah diurutkan (meja kedua). Elemen pertama diambil dari bagian array yang belum diurutkan dan kemudian diletakkan sesuai posisinya pada bagian lain dari array yang telah diurutkan.Langkah ini dilakukan secara berulang hingga tidak ada lagi elemen yang tersisa pada bagian array yang belum diurutkan.

Kelemahan metode ini adalah jika ada data pada posisi ke-1000, maka dibutuhkan pergeseran elemen sebanyak 998 kali.

Contoh penulisan dalam algoritma:procedure UrutSisip(input/output L: Larik, input N : integer)

DEKLARASIK : integer {pencacah langkah}

5

Page 9: Makalah Algoritma Pengurutan Dan Pencarian

J : integer {pencacah untuk penelusuran larik}Temp : integer {peubah bantu untuk agar L[K] tidak ditimpa selama

pergeseran}

ALGORITMA{elemen L[1] dianggap sudah terurut}for K ← 2 to N do {mulai dari langkah 2 sampai langkah N}

Temp ← L[K] {ambil elemen L[K] supaya tidak ditimpa pergeseran}{cari posisi yang tepat untuk L[K] di dalam L[1..K-1] sambil

menggeser}J ← K – 1while Temp ≤ L[J] AND (J > 1) doL[J+1] ← L[J]J ← J-1Endwhileif Temp ≥ L[J] thenL[J+1] ← TempElseL[J+1] ← L[J]L[J] ← Tempendif

endfor

D. SHELL SORT

Algoritma pengurutan shell ini ditemukan oleh Donald Shell pada tahun1959. Algoritma ini merupakan perbaikan terhadap pengurutan sisip.Jika pada metode pengurutan sisip,  jika ada data pada posisi ke-1000, maka dibutuhkan pergeseran elemen sebanyak 998 kali.

6

Page 10: Makalah Algoritma Pengurutan Dan Pencarian

Untuk mengurangi pergeseran terlalu jauh, harus mengurutkan larik setiap k elemen dengan metode pengurutan shell, 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 nilai step selalu berkurang maka algoritma pengurutan Shell kadang – kadang dinamakan juga algoritma pengurutan kenaikan yang berkurang (diminishing increment sort).

Contoh :Procedure InSort(input/output L : LarikInt, input n,start,step : interger)

{mengurutkan elemen larik L[start..n] sehingga tersusun menaik dengan metode pengurutan sisip yang dimodifikasi untuk shell sort}

DEKLARASI

i     : interger         {pencacah step}j     : interger         {pencacah untuk penelusuran larik}y    : interger         {peubah bantu yang menyimpan nilai L[k]}ketemu     : Boolean         {untuk menyatakan posisi penyisipan

ditemukan}

ALGORITMA        {elemen L[start] dianggap sudah terurut}i← start + stepwhile i ≤ n do

            y← L[i]            {sisipkan L[i] ke dalam bagian yang sudah terurut }

7

Page 11: Makalah Algoritma Pengurutan Dan Pencarian

            {cari posisi yang tepat untuk y di dalam L[start..i-1] sambil menggeser}            j← i – step            ketemu← false            while (j ≥1) AND (not ketemu) do                        if y < L[j] then                                    L[j+step] ← L[j]                                    j← j-step                        else                                    ketemu← true                        endif            endwhile            {j< 1 or ketemu}            L[j+step] ← y {sisipkan y pada tempat yang sesuai}            i← i + stependwhile

BAB IIALGORITMA PENCARIAN

Pencarian(searhing) merupakan proses yang fundamental dalam pengolahan data. Proses pensarian adalah menemukan nilai(data) tertentu

8

Page 12: Makalah Algoritma Pengurutan Dan Pencarian

didalam sekumpulan data yang bertipe sama (baik bertipe dasar maupun bertipe bentukan).

Sebuah algoritma pencarian dijelaskan secara luas adalah sebuah algoritma yang menerima masukan berupa sebuah masalah dan menghasilkan sebuah solusi untuk masalah tersebut, yang biasanya didapat dari evaluasi beberapa kemungkinan solusi. Algoritma pencarian (searching algorithm) adalah algoritma yang menerima sebuah argumen kunci dan dengan langkah-langkah tertentu akan mencari rekaman dengan kunci tersebut. Setelah proses pencarian dilaksanakan, akan diperoleh salah satu dari dua kemungkinan, yaitu data yang dicari ditemukan (successful) atau tidak ditemukan (unsuccessful).

Macam-macam Algoritma Pencarian (Searching)

1. Pencarian Sekuensial (Sequential searching)2. Pencarian Beruntun dengan Sentinel3. Pencarian Biner (binary search)

A. Pencarian sekuensial (Sequential searching)

- Pengertian

Pencarian Sekuensial (sequential searching) atau pencarian berurutan sering disebut pencarian linear merupakan metode pencarian yang paling sederhana. Pencarian beruntun adalah proses membandingkan setiap elemen larik satu per satu secara beruntun, mulai dari elemen pertama sampai elemen yang dicari ditemukan atau seluruh elemen sudah diperiksa. Pencarian beruntun terbadi dua:

1. Pencarian beruntun pada larik tidak terurut;2. Pencarian beruntun pada larik terurut.

- Algoritma

9

Page 13: Makalah Algoritma Pengurutan Dan Pencarian

Pencarian berurutan menggunakan prinsip sebagai berikut :

1. data yang ada dibandingkan satu per satu secara berurutan dengan yang dicari sampai data tersebut ditemukan atau tidak ditemukan.

2. Pada dasarnya, pencarian ini hanya melakukan pengulangan dari 1 sampai dengan jumlah data.

3. Pada setiap pengulangan, dibandingkan data ke-i dengan yang dicari.

4. Apabila sama, berarti data telah ditemukan. Sebaliknya apabila sampai akhir pengulangan tidak ada data yang sama, berarti data tidak ada.

Kelemahan pada kasus yang paling buruk, untuk N elemen data harus dilakukan pencarian sebanyak N kali pula. Algoritma pencarian berurutan dapat dituliskan sebagai berikut :

(1) i ← 0(2) ketemu ← false(3) Selama (tidak ketemu) dan (i <= N) kerjakan baris 4(4) Jika (Data[i] = x) maka ketemu ← true, jika tidak i ← i +

1(5) Jika (ketemu) maka i adalah indeks dari data yang

dicari, jika data tidak ditemukan

- Contoh

#include <stdio.h>

#include <conio.h>

void main(){

int data[8] = {8,10,6,-2,11,7,1,100};

int cari;10

Page 14: Makalah Algoritma Pengurutan Dan Pencarian

int flag=0;

printf("masukkan data yang ingin dicari = ");scanf("%d",&cari);

for(int i=0;i<8;i++){

if(data[i] == cari) flag=1;

}

if(flag==1) printf("Data ada!\n");

else printf("Data tidak ada!\n");

getch();

return 1;

}

Dari program diatas, terlihat bahwa dilakukan perulangan untuk mengakses semua elemen array data satu persatu berdasarkan indeksnya.

Program menggunakan sebuah variabel flag yang berguna untuk menadai ada atau tidaknya data yang dicari dalam array data. Hanya bernilai 0 atau 1.

Flag pertama kali diinisialiasasi dengan nilai 0.

Jika ditemukan, maka flag akan diset menjadi 1, jika tidak ada maka flag akan tetap bernilai 0.

Semua elemen array data akan dibandingkan satu persatu dengan data yang dicari dan diinputkan oleh user.

B. Pencarian Beruntun dengan Sentinel

- Pengertian

11

Page 15: Makalah Algoritma Pengurutan Dan Pencarian

Jika pencarian bertujuan untuk menambahkan elemen baru setelah elemen terakhir larik, maka terdapat sebuah varian dari metode pencarian beruntun yang mangkus. Nilai x yang akan dicari sengaja ditambahkan terlebih dahulu. Data yang ditambahkan setelah elemen terakhir larik ini disebut sentinel.

- AlgoritmaProcedure SeqSearchWithSentinel(input L: LarikInt, input n:

integer, input x: integer, output idx: integer)

DEKLARASI

I: integer

ALGORITMA

L[n+1] ← X {sentinel}

I ← 1

While (L[i] ≠ x) do

I ← i+1

Endwhile

If idx = n+1 then

idx ← -1

else

idx ← 1

endif

- Contoh

#include <stdio.h>

12

Page 16: Makalah Algoritma Pengurutan Dan Pencarian

#include <conio.h>

void main(){

int data[7] = {3,12,9,-4,21,6};

int cari,i;

printf("masukkan data yang ingin dicari = ");scanf("%d",&cari);

data[6] = cari;

i=0;

while(data[i] != cari) i++;

if(i<6) printf("Data ada!\n"); else printf("Data tidak ada!\n");

getch;

return 1;

}

C. Pencarian Biner (binary search)

- PengertianTerdapat metode pencarian pada data terurut yang paling

efficient, yaitu metode pencarian bagidua atau pencarian biner (binary search). Metode ini digunakan untuk kebutuhan pencarian dengan waktu yang cepat. Prinsip pencarian dengan membagi data atas dua bagian mengilhami metode ini. Data yang disimpan di dalam larik harus sudah terurut.

13

Page 17: Makalah Algoritma Pengurutan Dan Pencarian

BST adalah binary tree yang mana data di dalamnya tersusun sedemikian rupa sehingga pada setiap subtree di dalamnya berlaku:

setiap data di subtree kiri < data root subtree < setiap data di subtree kanan.

- Algoritma

class BinaryNode {

void printInOrder( )

{

if( left != null )

left.printInOrder( ); // Left

System.out.println( element ); // Node

if( right != null )

right.printInOrder( ); // Right

}

}

class BinaryTree {

public void printInOrder( )

{

if( root != null )

root.printInOrder( );

}

}

14

Page 18: Makalah Algoritma Pengurutan Dan Pencarian

Prinsip dari pencarian biner dapat dijelaskan sebagai berikut :

mula-mula diambil posisi awal 0 dan posisi akhir = N - 1, kemudian dicari posisi data tengah dengan rumus (posisi awal + posisi akhir) / 2.

Kemudian data yang dicari dibandingkan dengan data tengah.

Jika lebih kecil, proses dilakukan kembali tetapi posisi akhir dianggap sama dengan posisi tengah –1.

Jika lebih besar, porses dilakukan kembali tetapi posisi awal dianggap sama dengan posisi tengah + 1.

Demikian seterusnya sampai data tengah sama dengan yang dicari.

Algoritma pencarian biner dapat dituliskan sebagai berikut :

- Contoh

L ← 0

R ← N - 1

ketemu ← false

Selama (L <= R) dan (tidak ketemu) kerjakan baris 5 sampai dengan 8

m ← (L + R) / 2 83

Jika (Data[m] = x) maka ketemu ← true

Jika (x < Data[m]) maka R ← m – 1 Jika (x > Data[m]) maka L ←

m + 1

Jika (ketemu) maka m adalah indeks dari data yang dicari, jika tidak data tidak ditemukan.

int binary_search(int cari){

15

Page 19: Makalah Algoritma Pengurutan Dan Pencarian

int l,r,m;

l = 0;

r = n-1;

int ktm = 0;

while(l<=r && ktm==0){

m = (l+r)/2;

if(data[m] == cari) ktm=1;

else if (cari < data[m]) r=m-1;

else l=m+1; {

if(ktm==1) return 1; else return 0;

}

}

}

16