Anda di halaman 1dari 34

Tugas I

Analisis Algoritma
Nama Mahasiswa :
Cornelis FJ Latupapua (371986)
Dirja Nur Ilham (371893)
Ilham Sahputra (371984)

Program Studi Magister Ilmu Komputer


Fakultas Matematika dan Ilmu Pengetahuan Alam
Universitas Gadjah Mada
Yogyakarta

Algoritma Pengurutan (Sorting)


1.
2.
3.
4.
5.

Insertion Sort.
Selection Sort.
Bubble Sort.
Shell Sort.
Comb Sort.

Insertion Sort
Insertion Sort adalah sebuah metode pengurutan data dengan
menempatkan setiap elemen data pada posisinya dengan cara
melakukan perbandingan dengan data-data yang ada.
Algoritma dari metode insertion sort dapat dianalogikan sama
seperti mengurutkan kartu, dimana suatu kartu jika dipindah
tempatkan menurut posisinya, maka kartu yang lain akan
bergeser mundur atau maju sesuai kondisi pemindahan kartu
tersebut.

Insertion Sort

Dalam pengurutan data, metode ini dipakai bertujuan untuk


menjadikan bagian sisi kiri array terurutkan sampai dengan
seluruh array diurutkan.

Insertion Sort
Langkah demi langkah pengurutan dengan metode insertion sort
adalah seperti contoh dibawah ini :
1

Data Awal

67

33

21

84

49

50

75

Tahap ke-1

67

33

21

84

49

50

75

Tahap ke-2

33

67

21

84

49

50

75

Tahap ke-3

21

33

67

84

49

50

75

Tahap ke-4

21

33

67

84

49

50

75

Tahap ke-5

21

33

49

67

84

50

75

Tahap ke-6

21

33

49

50

67

84

75

Tahap ke-7

21

33

49

50

67

75

84

Data Akhir

21

33

49

50

67

75

84

Pseudo code Insertion Sort


for(int i=1; i<6; i++)
{
int j=i;
while(data[j]<data[j-1])
{
int tmp=data[j];
data[j]=data[j-1];
data[j-1]=tmp;
j;
}
}

Kompleksitas Insertion Sort


Algoritma insertion sort terdiri dari 2 kalang bersarang. Dimana
terjadi N-1 Pass (dengan N adalah banyak elemen struktur data),
dengan masing-masing Pass terjadi i kali operasi perbandingan.
i tersebut bernilai 1 untuk Pass pertama, bernilai 2 untuk Pass
kedua, begitu seterusnya hingga Pass ke N-1.

n(n 1)
T (n) 1 2 ... n 1
o( n 2 )
2
i 1
n 1

Kompleksitas Insertion Sort


Grafik kompleksitas insertion sort adalah seperti pada gambar
dibawah ini :

Selection Sort
Selection Sort merupakan perbaikan dari metode bubble sort
dengan mengurangi jumlah perbandingan.
Dikatakan selection sort karena algoritma ini mencoba memilih
satu per satu elemen data dari posisi awal hingga posisi N-1
untuk mencari data yang paling kecil dengan mencatat posisi
index-nya, kemudian dilakukan pertukaran hanya sekali pada
akhir setiap tahapan.

Selection Sort
Contohnya diberikan data awal : 38 91 13 57 27 23 61, maka
langkah per langkah penguruta data dengan metode selection sort
adalah sebagai berikut :
1

Data Awal

38

91

13

57

27

23

61

Tahap ke-1

13

91

38

57

27

23

61

Tahap ke-2

13

23

38

57

27

91

61

Tahap ke-3

13

23

27

57

38

91

61

Tahap ke-4

13

23

27

38

57

91

61

Tahap ke-5

13

23

27

38

57

91

61

Tahap ke-6

13

23

27

38

57

61

91

Selection Sort
Algoritma selection sort seperti pada contoh data diatas adalah
sebagai berikut :
1.Inisialisasi n adalah ukuran data, pada contoh diatas terdapat
n=7.
2.Inisialisasi i = 1 sebagai awal proses (kotak merah).
3.Inisialisasi j = i + 1
4.Jika pada posisi j (kotak hitam) ditemukan data yang terkecil,
bandingkan data tersebut dengan data i. Jika jterkecil < i maka ubah
data jterkecil ke posisi i.
5.i = i + 1
6.j = i + 1

Selection Sort
7. Jika j n dan i < n-1 ulangi ke langkah 3.
8. Jika j = n dan i = n-1 maka proses selesai.

Pseudo code Selection Sort


void selectionsort(int arr[ ]) {
int i,j;
for (i = 0; i < N; i++) {
int min = arr[i];
int pos = i;
for (j = i; j < N; j++) {
/* Cari nilai yang terkecil */
if (arr[j] < min) {
min = arr[j];
pos = j;
}
}
/* Tukar nilai terkecil ke arr[i] jika pos tdk sama i */
if(i!=pos) {
int temp = arr[i];
arr[i] = arr[pos];
arr[pos] = temp;
}
}
}

Kompleksitas Selection Sort


Algoritma selection sort terdiri dari kalang bersarang. Dimana
kalang tingkat pertama (disebut Pass) berlangsung N-1 kali.
Didalam kalang kedua,dicari elemen dengan nilai terkecil. Jika
didapat, indeks yang didapat ditimpakan ke variabel min
selanjutnya dilakukan proses penukaran. Begitu seterusnya untuk
setiap Pass. Pass sendiri makin berkurang hingga nilainya
menjadi semakin kecil. Berdasarkan operasi perbandingan
elemennya :
n 1
T (n) (n 1) (n 2) ... 2 1 n 1

n(n 1)
o( n 2 )
2

Kompleksitas secara simptotik adalah O(n2).

i 1

Kompleksitas Selection Sort


Grafik kompleksitas selection sort adalah seperti pada gambar
dibawah ini :

Bubble Sort
Bubble Sort adalah salah satu algoritma pengurutan yang
paling simple, baik dalam hal pengertian maupun
penerapannya. Ide dari algoritma ini adalah mengulang
proses pembandingan antara tiap-tiap elemen array dan
menukarnya apabila urutannya salah. Pembandingan
elemen-elemen ini akan terus diulang hingga tidak perlu
dilakukan penukaran lagi. Algoritma ini termasuk dalam
golongan
algoritma
comparison
sort,
karena
menggunakan perbandingan dalam operasi antar
elemennya. Berikut ini adalah gambaran dari algoritma
bubble sort.

Bubble Sort
Misalkan kita mempunyai sebuah array dengan
elemenelemen 4 2 5 3 9. Proses yang akan terjadi
apabila digunakan algoritma bubblesort adalah sebagai
berikut.

Dapat dilihat pada proses di atas, sebenarnya pada pass kedua,


langkah kedua, array telah terurut. Namun algoritma tetap
dilanjutkan hingga pass kedua berakhir. Pass ketiga dilakukan
karena definisi terurut dalam algoritma bubblesort adalah tidak ada
satupun penukaran pada suatu pass, sehingga pass ketiga
dibutuhkan untuk memverifikasi keurutan array tersebut.

Kompleksitas Bubble Sort


Kompleksitas Algoritma Bubble Sort dapat dilihat dari
beberapa jenis kasus, yaitu worst-case, average-case,
dan best-case.
1. Kondisi Best-Case
Dalam kasus ini, data yang akan disorting telah terurut
sebelumnya, sehingga proses perbandingan hanya
dilakukan sebanyak (n-1) kali, dengan satu kali pass.
Proses
perbandingan
dilakukan
hanya
untuk
memverifikasi keurutan data. Contoh Best-Case dapat
dilihat pada pengurutan data 1 2 3 4 di bawah ini.

Kompleksitas Bubble Sort


2. Kondisi Worst-Case

Dalam kasus ini, data terkecil berada pada ujung array. Contoh
Worst-Case dapat dilihat pada pengurutan data 4 3 2 1 di bawah
ini.

Dari langkah pengurutan di atas, terlihat bahwa setiap kali


melakukan satu pass, data terkecil akan bergeser ke arah awal
sebanyak satu step. Dengan kata lain, untuk menggeser data
terkecil dari urutan keempat menuju urutan pertama, dibutuhkan
pass sebanyak tiga kali, ditambah satu kali pass untuk
memverifikasi. Sehingga jumlah proses pada kondisi best case
dapat dirumuskan sebagai berikut.

Kompleksitas Bubble Sort


3. Kondisi Average-Case

Pada kondisi average-case, jumlah pass ditentukan dari elemen


mana yang mengalami penggeseran ke kiri paling banyak. Hal ini
dapat ditunjukkan oleh proses pengurutan suatu array, misalkan
saja (1 8 6 2). Dari (1 8 6 2), dapat dilihat bahwa yang akan
mengalami proses penggeseran paling banyak adalah elemen 2,
yaitu sebanyak dua kali.

Dari proses pengurutan di atas, dapat dilihat bahwa untuk


mengurutkan diperlukan dua buah passing, ditambah satu buah
passing untuk memverifikasi. Dengan kata lain, jumlah proses
perbandingan dapat dihitung sebagai berikut.

Kelebihan & Kekurangan Algoritma


Bubble Sort
Kelebihan Bubble Sort
a.Algoritma yang simpel.
b.Mudah untuk diubah menjadi kode.
c. Definisi terurut terdapat dengan jelas dalam algoritma.
d.Cocok untuk pengurutan data dengan elemen kecil telah terurut.

Kekurangan Bubble Sort


a.Tidak efektif dalam pengurutan data berskala besar.
b.Langkah pengurutan yang terlalu panjang.

Shell Sort
Shell Sort adalah algoritma dengan kompleksitas algoritma
O(n2) dan yang paling efisien dibanding algoritma-algoritma
lain dengan kompleksitas algoritma yang sama. Algoritma
shell sort lima kali lebih cepat dibandingkan algoritma
pengurutan gelembung dan dua kali lebih cepat
dibandingkan algoritma pengurutan dengan penyisipan. Dan
tentu saja shell sort juga merupakan algoritma yang paling
kompleks dan sulit dipahami.
Pada langkah pertama, ambil elemen pertama dan kita
bandingkan dengan elemen pada jarak tertentu dari elemen
pertama tersebut. Kemudian elemen kedua dibandingkan
dengan elemen lain dengan jarak yang sama. Demikian
seterusnya sampai seluruh elemen dibandingkan.

Shell Sort

Misal terdapat elemen sebagai berikut : 23 45 12 24 56 34 27 23 16

Shell Sort

Misal terdapat elemen sebagai berikut : 23 45 12 24 56 34 27 23 16

Pseudo code Shell Sort


void shellsort(int v[], int n){
int gap, i, j, temp;
for (gap = n/2; gap > 0; gap /= 2)
for (i = gap; i < n; i++)
for (j=i-gap; j>=0 && v[j]>v[j+gap]; j-=gap) {
temp = v[j];
v[j] = v[j+gap];
v[j+gap] = temp;
}
}

Kompleksitas Shell Sort


Worst case
:
Best Case
:
Average Case :

O(n2)
O(N log2 N)
Bergantung pada jumlah gap

Comb Sort

Comb Sort adalah algoritma sorting yang merupakan


pengembangan dari buble sort
Gagasan utamanya adalah untuk menghilangkan nilai-nilai
kecil yang berada didekat akhir dari list data, karena ini
memperlambat proses penyortiran.
Memiliki kesamaan dengan shell sort yang merupakan
pengembangan dari insertion sort
Menggunakan nilai gap dalam memilih dua elemen untuk
dibandingkan dan diurutkan
Stephen Lacey dan Richard Box, yang mempopulerkan
algoritma, menyarankan bahwa untuk setiap iterasi nilai gap
harus dibagi dengan 1.3, agar memperoleh hasil yang optimal.

Comb Sort
Contoh :
Terdapat data awal sebagai berikut :

Jumlah elemen data


Dibagi dengan
Hasil

:
:
:

10
1.3
7.65 dibulatkan menjadi 8

Comb Sort
Contoh :
Terdapat data awal sebagai berikut :

Comb Sort

Comb Sort

Pseudo code Shell Sort

Kompleksitas Shell Sort


Worst case
:
Best Case
:
Average Case :

O(n2)
O(N)
(n2/ 2p)
p = number of incremen