Anda di halaman 1dari 14

MAKALAH

DI
S
U
S
U
N
OLEH

NAMA : LAILAITUL ILMI


NPM : 16105111066
FAKULTAS : TEKNIK INFORMATIKA

UNIVERSITAS JABAL GHAFUR


GLEE GAPUI – SIGLI

KATA PENGANTAR

           
Puji syukur kami pamjatkan atas kehadirat ALLAH SWT , karena berkat rahmat dan
anugrah-Nyalah makalah ini dapat deselesaikan tepat pada waktunya.
            Dalam pembuatan Makalah ini kami tidak sendiri membuat tetapi kami banyak
mendapat bantuan dari pihak lain serta buku-buku yang menujang pembuatan Makalah ini
serta saran dari teman-teman sehingga pada kesempatan ini kami mengucapkan terima kasih
kepada semua yang sudah membantu dalam pembuatan Makalah ini.
            Semoga Makalah ini bias bermanfaat bagi para pembaca dalam mengaplikasihkan
dikehidupan sehari-hari,            makalah ini masih jauh dari sempurna, untuk itu kritik dan
saran dari pembaca yang bersifat membangun akan sangat dperlukan demi kesempurnaan
Makalah yang akan kami buat mendatang.
           

Penyusun,5 januari 2018

DAFTAR ISI
                                
Kata pengantar.......................................................................................................... i
Daftar isi.................................................................................................................. ii           
Abstrak.................................................................................................................... iv           
Bab I Pendahuluan........................................................................................... ....... 1
1.1.Latar Belakang....................................................................................... 1
1.2.Permasalahan ......................................................................................... 2
1.3. Tujuan                                                                                           ....... 2
Bab II Pembahasan                                                                                            .........
            2.1.   Bubble Sort...........................................................................................
            2.2.   Insertion  Sort..............................................................................
            2.3.   Selection Sort............................................................................... .........
            2.4.   Quick Sort...................................................................................
            2.5.    Pencarian sekun (sequnetial searching....................................
2.6. Pencarian biner (binary searching).............................................
Bab II Penutup...........................................................................................................
            3.1.    Kesimpulan..................................................................................
            3.2.    Saran                                                                                            
Daftar Pustaka

BAB I
PENDAHULUAN
1.1.Latar Belakang
Dalam matematika dan komputasi, algoritma merupakan kumpulan perintah untuk
menyelesaikan suatu masalah. Perintah-perintah ini dapat diterjemahkan secara bertahap dari
awal hingga akhir. Masalah tersebut dapat berupa apa saja, dengan catatan untuk setiap
masalah, ada kriteria kondisi awal yang harus dipenuhi sebelum menjalankan algoritma.
Algoritma akan dapat selalu berakhir untuk semua kondisi awal yang memenuhi kriteria,
dalam hal ini berbeda dengan heuristik. Algoritma sering mempunyai langkah pengulangan
(iterasi) atau memerlukan keputusan (logika Boolean dan perbandingan) sampai tugasnya
selesai.
Desain dan analisis algoritma adalah suatu cabang khusus dalam ilmu komputer yang
mempelajari karakteristik dan performa dari suatu algoritma dalam menyelesaikan masalah,
terlepas dari implementasi algoritma tersebut. Dalam cabang disiplin ini algoritma dipelajari
secara abstrak, terlepas dari sistem komputer atau bahasa pemrograman yang digunakan.
Algoritma yang berbeda dapat diterapkan pada suatu masalah dengan kriteria yang sama.
Kompleksitas dari suatu algoritma merupakan ukuran seberapa banyak komputasi
yang dibutuhkan algoritma tersebut untuk menyelesaikan masalah. Secara informal,
algoritma yang dapat menyelesaikan suatu permasalahan dalam waktu yang singkat memiliki
kompleksitas yang rendah, sementara algoritma yang membutuhkan waktu lama untuk
menyelesaikan masalahnya mempunyai kompleksitas yang tinggi.
Sedangkan sorting adalah sebuah proses merangkai benda dalam urutan tertentu
dan/atau dalam himpunan yang berbeda, dan oleh karena itu dia memiliki dua arti umum
yang berbeda:
1.      pengurutan: merangkai benda yang sejenis, sekelas, dll, dalam urutan yang teratur.
2.      kategorisasi: pengelompokan dan pemberian label kepada benda dengan sifat yang
serupa.
algoritma sorting terdiri dari beberapa algoritma seperti Bubble sort, Quick sort,
Selection Sort, Insertion Sort, dan Merge Sort yang dimana setiap jenis sorting ini memiliki
perbedaan satu sama lainnya.

1.2.Rumusan Masalah
Dari latar belakang diatas adapun permasalahan kami adalah sebagai berikut :
1.2.1.      Apa pengertian algoritma sorting?
1.2.2.      Apa saja bagian-bagian algoritma sorting?
1.2.3.      Apa fungsi dari bagian-bagian algoritma sorting tersebut ?

1.3.            Tujuan
Dari rumusan masalah diatas, adapun tujuan kami adalah sebagai berikut:
1.3.1.      Untuk mengetahui pengertian algoritma sorting?
1.3.2.      Untuk mengetahui bagian-bagian algoritma sorting?
1.3.3.      Untuk mengetahui fungsi dari bagian-bagian algoritma sorting tersebut ?

BAB II
PEMBAHASAN

Sorting didefinisikan sebagai pengurutan sejumlahdata berdasarkan nilai kunci


tertentu. Pengurutan dapat dilakukan dari nilai terkecil ke nilai terbesar (ascending) atau
sebaliknya (descending).Algoritma Sorting termasuk salah satu contoh yangkaya akan solusi.
Dalam makalah ini, hanya akan dibahas lima algoritma sorting yang populer dipakai didunia
informatika.

2.1.      Bubble Sort


Bubble Sort merupakan cara pengurutan yang sederhana. Konsep dari ide dasarnya
adalah seperti “gelembung air” untuk elemen struktur data yang semestinya berada pada
posisi awal. Cara kerjanya adalah dengan berulang-ulang melakukan traversal (proses
looping) terhadap elemen-elemen struktur datayang belum diurutkan. Di dalam traversal
tersebut, nilai dari dua elemen struktur data dibandingkan. Jika ternyata urutannya tidak
sesuai dengan “pesanan”, maka dilakukan pertukaran (swap). Algoritma sortingini disebut
juga dengan comparison sort dikarenakanhanya mengandalkan perbandingan nilai elemen
untuk mengoperasikan elemennya.
Algoritma bubble sort dapat diringkas sebagai berikut, jika N adalah panjang elemen
struktur data, dengan elemen-elemennya adalah T1, T2, T3, …, TN-1,TN, maka:
1.   Lakukan traversal untuk membandingkan dua elemen berdekatan. Traversal ini
dilakukan dari belakang.
2.   Jika elemen pada TN-1 > TN , maka lakukan pertukaran (swap). Jika tidak, lanjutkan
ke proses traversal berikutnya sampai bertemu dengan bagian struktur data yang telah
diurutkan.
3.   Ulangi langkah di atas untuk struktur data yang tersisa.

Pseudocode dari bubble Sort adalah sebagai berikut;
  For I = 0 to N - 2
       For J = 0 to N - 2
         If (A(J) > A(J + 1)
           Temp = A(J)
           A(J) = A(J + 1)
           A(J + 1) = Temp
         End-If
       End-For
     End-For

2.2.      Insertion Sort


Metode pengurutan pada insertion sort adalah metode dengan cara menyisipkan eleme
n larik pada posisi yang tepat.Cara kerja insertion sort, Pertama-tama, dilakukan iterasi,
dimana di setiap iterasi insertion sort memindahkan nilai elemen,kemudian menyisipkannya
berulang-ulang sampai ketempat yang tepat. Begitu seterusnya dilakukan.  Dari proses iterasi,
seperti biasa, terbentuklah bagian yang telah di-sorting dan bagian yang belum di-sorting.

Algoritma Insertion Sort dapat dirangkum sebagai berikut:


1.    Simpan nilai Ti kedalam variabel sementara, dengan i = 1.
2.    Bandingkan nilainya dengan elemen sebelumnya.
3.    Jika elemen sebelumnya (Ti-1) lebih besar nilainya daripada Ti, maka tindih nilai Ti
dengan nilai Ti-1 tersebut. Decrement i (kurangi nilainya dengan 1).
4.    Lakukan terus poin ke-tiga, sampai Ti-1 ≤ Ti.
5.   Jika Ti-1 ≤ Ti terpenuhi, tindih nilai di Ti dengan variabel sementara yang disimpan
sebelumnya.
6.    Ulangi langkah dari poin 1 di atas dengan i di-increment (ditambah satu).
Pseudocode dari Insertion Sort adalah sebagai berikut;
procedure insertion;
   var i,j,v: integer;
   begin
for i:=2 to N do
begin
v:=a[i];j:=1;
while a[j1] > v do
 begin a[j]:=a[j1]; j:=j1 end;
a[j]:=v;
end
end;

2.3.      Selection Sort


Selection Sort adalah sort yang melakukan beberapa kali pass untuk melakukan
penyeleksian elemen struktur data. Untuk sorting ascending (menaik), elemen yang paling
kecil di antara elemen-elemen yang belum urut, disimpan indeksnya, kemudian dilakukan
pertukaran nilai elemen dengan indeks yang disimpan tersebut dengan elemen yang paling
depan yang belum urut. Sebaliknya, untuk sorting descending (menurun), elemen yang paling
besar yang disimpan indeksnya kemudian ditukar.

Algoritma selection sort dapat dirangkum sebagai berikut:


1.  Temukan nilai yang paling minimum (atau sesuai keinginan) di dalam struktur data. Jika
ascending, maka yang harus ditemukan adalah nilai yang paling minimum. Jika
descending, maka temukan nilai yang paling maksimum.
2.   Tukar nilai tersebut dengan nilai pada posisipertama di bagian struktur data yang belum
diurutkan.
3.   Ulangi langkah di atas untuk bagian struktur datayang tersisa.

Pseudocode dari selection Sort adalah sebagai berikut;
  For I = 0 to N-1 do:
       Smallsub = I
       For J = I + 1 to N-1 do:
         If A(J) < A(Smallsub)
           Smallsub = J
         End-If
       End-For
       Temp = A(I)
       A(I) = A(Smallsub)
       A(Smallsub) = Temp
     End-For

2.4.      Quick Sort


Quick Sort adalah algoritma sorting yang terkenal yang dirancang oleh C.A.R. Hoare
pada tahun 1960 ketika bekerja untuk perusahaan manufaktur komputer saintifik kecil, Elliott
Brothers. Algoritma ini rekursif, dan termasuk paradigma algoritma divide and conquer.
Algoritma ini terdiri dari 4 langkah utama:
1.   Jika struktur data terdiri dari 1 atau 0 elemen yang harus diurutkan, kembalikan struktur
data itu apa adanya.
2.   Ambil sebuah elemen yang akan digunakansebagai pivot point (poin poros).  (Biasanya
elemen yang paling kiri.)
3.   Bagi struktur data menjadi dua bagian – satu dengan elemen-elemen yang lebih besar
daripada pivot point, dan yang lainnya dengan elemen-elemen yang lebih kecil dari
pada pivot point.
4.   Ulangi algoritma secara rekursif terhadap kedua paruh struktur data.
Berikut adalah tiga proses di dalam metode divide dan conqueror untuk
algoritma Quick Sort:
Divide        :  Bagi array A[l..r] menjadi dua subarray A[l..pivot-1] dan A[pivot+1..r]
sehingga setiap elemen di dalam sub array A[l..pivot1] bernilai lebih kecil atau
sama dengan A[pivot]. Untuk menghitung nilai pivot merupakan bagian dari
prosedur partition.
Conqueror :  Urutkan subarray A[l..pivot1] dan A[pivot+1..r] secara rekursif ke prosedur
quicksort
Combine : Karena subarray sudah terurut, maka array A[l..r] sudah terurut.
Pseudocode dari algoritma quick sort adalah sebagai berikut:
procedure quicksort(l,r:integer);
   var pivot: integer;
   begin
for r > l then
begin
 pivot:=partition(l,r);
 quicksort(l,pivot1);
 quicksort(pivot+1,r);
end
end;
Algoritma dari partisi array A[l..r] adalah :

x := A[r]
i := l-1
for j := l to r-1
do if A[j]< = x
then i := i + 1
exchange A[i] with A[j]
exchange A[i+1] with A[r]
return i+1

 2.5.  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)           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;
   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.

2.6. 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( );                               // Left
              System.out.println( element );            // 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 :

1. mula-mula diambil posisi awal 0 dan posisi akhir = N - 1, kemudian dicari posisi data
tengah dengan rumus (posisi awal + posisi akhir) / 2.
2. Kemudian data yang dicari dibandingkan dengan data tengah.
3. Jika lebih kecil, proses dilakukan kembali tetapi posisi akhir dianggap sama dengan
posisi tengah –1.
4. Jika lebih besar, porses dilakukan kembali tetapi posisi awal dianggap sama dengan
posisi tengah + 1.
5. Demikian seterusnya sampai data tengah sama dengan yang dicari.
Algoritma pencarian biner dapat dituliskan sebagai berikut : 

1.  L  ← 0
2. R ← N - 1
3. ketemu ← false
4. Selama (L <= R) dan (tidak ketemu) kerjakan baris 5 sampai dengan 8   
5. m ← (L + R) / 2 83
6.  Jika (Data[m] = x) maka ketemu ← true
7.  Jika (x < Data[m]) maka R ← m – 1 Jika (x > Data[m]) maka L  ← m + 1
8. Jika (ketemu) maka m adalah indeks dari data yang dicari, jika tidak data tidak
ditemukan.

  Contoh

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;
}         
}                     
}
BAB III
PENUTUP

3.1.      Kesimpulan
Algoritma yang mudah dalam hal implementasi adalah Bubble Sort, Selection Sort,
dan Insertion Sort. Ketiganya memiliki kompleksitas O(n2). Di antara algoritma ini, yang
paling effisien adalah Insertion Sort.  Algoritma yang lebih mangkus adalah MergeSort dan
Quick Sort dengan kompleksitasnya adalah O(n log n). Adapun yang paling mangkus dari
lima algoritma ini adalah Quick Sort.
3.2.      Saran
Dengan disusunya makalah ini, semoga makalah ini bias menjadi infirasi dalam
kehidupan sehari-hari, secara tidak sengaja sering kita malakukan prosedut semacam ini di
kehidupan sehari-hari seperti melakukan langkah mencuci baju, menjalankan sepeda
motor.itu semua adalah algoritma yang dilakukan dalam kehidupan sehari-hari.begitu juga
dalam computer atau didalam bahasa pemrograman. Jika langkah-langkah dalam kehidupan
sehari-hari kita amati, hampir tidak jauh beda dengan langkah-langkah pemrograman.

Anda mungkin juga menyukai