Anda di halaman 1dari 19

Algoritma Pengurutan

Algoritma Pencarian

Dosen :
Algoritma Pemrograman I
Retno Hendrowati, MT

Penulis :
Sanhaji
115103005

Universitas Paramadina
2015

DAFTAR ISI
Kata Pengantar......................................................................................................... i
BAB I ALGORITMA PENGURUTAN.........................................................................1
A.

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

B.

ALGORITMA PENGURUTAN SELEKSI........................................................2

i.
ii.

Algoritma Pengurutan Seleksi Maksimum..............................................2


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

C.

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

D.

SHELL SORT................................................................................................. 7

BAB II ALGORITMA PENCARIAN...........................................................................9


A.

Pencarian sekuensial (Sequential searching)........................................9

B.

Pencarian Beruntun dengan Sentinel....................................................12

C.

Pencarian Biner (binary search)............................................................14

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

BAB I
ALGORITMA PENGURUTAN
Dalam algoritma pengurutan ada beberapa cara tapi yang akan dibahas
hanya empat, yaitu:
1.
2.
3.
4.

Metode
Metode
Metode
Metode

A.

Pengurutan
Pengurutan
Pengurutan
Pengurutan

apung ( Bubble Sort )


seleksi ( Selection Sort )
sisip ( Insertion Sort )
Shell ( Shell Sort)

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 nilainya
k.akhir : Elemen larik L terurut menaik sedemikian sehingga L[1]
<=L[2]<=...<=L[n]
deklarasi
i, k, temp : integer
Algoritma :
For i1 to n-1 do
For kn downto i+1 do

If L[k] < L[k-1] then


temp L[k]
L[k] L[k 1]
L[k 1] temp
Endif
endfor
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;
# 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 harganya
k.akhir

elemen

larik

terurut

menaik

sedemikian

sehingga

L[1]<=L[2]<=... <= L[n]


deklarasi
i, j, imaks, maks, temp : integer
Algoritma
For in 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 j2 to i do
if L[j] > maks then
imaksj
maksL[j]
endif
endfor
{pertukarkan maks dengan L[i]}
tempL[i]
L[i]maks
L[imaks]temp
Endfor
ii.

Algoritma Pengurutan Seleksi Minimum

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


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

DEKLARASI
i

: interger

{pencacah pass}

: interger

{pencacah untuk mencari nilai maksimum}

imin

: interger

{indeks yang berisi nilai minimu sementara}

ALGORITMA
for 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.


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)
DEKLARASI
K : integer {pencacah langkah}

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}
JK1
while Temp L[J] AND (J > 1) do
L[J+1] L[J]
J J-1
Endwhile
if Temp L[J] then
L[J+1] Temp
Else
L[J+1] L[J]
L[J] Temp
endif
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 ke1000, maka dibutuhkan pergeseran elemen sebanyak 998 kali.

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}

: interger

{pencacah untuk penelusuran larik}

: interger

{peubah bantu yang menyimpan nilai L[k]}

ketemu

: Boolean

{untuk menyatakan posisi penyisipan

ditemukan}

ALGORITMA
{elemen L[start] dianggap sudah terurut}
i start + step
while i n do
y L[i]

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


{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 + step
endwhile

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

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 Sentinel
3. 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
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)
(2)
(3)
(4)

i0
ketemu false
Selama (tidak ketemu) dan (i <= N) kerjakan baris 4
Jika (Data[i] = x) maka ketemu true, jika tidak i i

(5)

+1
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;
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
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.


Algoritma
Procedure SeqSearchWithSentinel(input L: LarikInt, input n:
integer, input x: integer, output idx: integer)
DEKLARASI
I: integer
ALGORITMA
L[n+1] X

{sentinel}

I1
While (L[i] x) do
I i+1
Endwhile
If idx = n+1 then
idx -1
else
idx 1
endif

Contoh
#include <stdio.h>
#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)


-

Pengertian
Terdapat 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.
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( );
System.out.println( element );

// Left
// Node

if( right != null )


right.printInOrder( );

// Right

}
}
class BinaryTree {
public void printInOrder( )
{
if( root != null )
root.printInOrder( );
}
}
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
RN-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){
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;
}
}
}