View
520
Download
37
Category
Preview:
DESCRIPTION
Makalah algoritma pengurutan
Citation preview
Algoritma Pengurutan
Algoritma Pencarian
Dosen :
Algoritma Pemrograman I
Retno Hendrowati, MT
Penulis :
Sanhaji
115103005
Universitas Paramadina
2015
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
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
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
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
# 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
{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
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
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
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
{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
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
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
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
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
#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
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
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
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
Recommended