Anda di halaman 1dari 34

Algoritma & Pemrograman 2

Data Structures &


Sorting
Indah Permatasari, M.Kom.
7th meeting
Outline
• Algoritma
• Review with games : BST Visualization
• Pengurutan (Sorting)
• Efesiensi Algoritma sorting
• Programming
• Insertion sort
• Selection sort
• Bubble sort
• Quick sort

Indah Permatasari, M.Kom. 2


Binary Trees vs
Binary Search Trees
Review

Indah Permatasari, M.Kom. 3


• For the set of {1, 4, 5, 10, 16, 17, 21} of keys, draw binary trees of
heights 2
• For the set of {1, 4, 5, 10, 16, 17, 21} of keys, draw binary search trees
of heights 2
• How to insert logic
• How to delete logic
• How to find logic

Indah Permatasari, M.Kom. 4


Binary Search Tree Visualization

http://btv.melezinek.cz/home.html

Indah Permatasari, M.Kom. 5


Pengurutan (Sorting)

Indah Permatasari, M.Kom. 6


Pengertian Sorting
• Penting untuk memudahkan pengolaan data
• Dapat dilakukan dengan urutan menaik (ascending) atau dengan
urutan menurun (descending)
• Contoh:
3 5 2 7 9 0 1 4 6 8

Ascending
0 1 2 3 4 5 6 7 8 9

Descending
9 8 7 6 5 4 3 2 1 0

Indah Permatasari, M.Kom. 7


Metode Pengurutan
• Metode Penyisipan (Insertion sort)
• Metode Seleksi (Selection sort)
• Metode Gelembung (Bubble sort)
• Metode Urut Cepat (Quick sort)

Indah Permatasari, M.Kom. 8


Insertion sort
• Metode pengurutan yang mengambil sebuah data sisip pada data
yang diurutkan dan menggeser data yang lebih besar dari sisip agar
data sisip dapat ditepatkan pada tempat yang benar
• Contoh:
34 67 23 28 98 15 89 67 28 18

• Urutkan secara ascending

Indah Permatasari, M.Kom. 9


34 67 23 28 98 15 89 67 28 18

34 67 23 28 98 15 89 67 28 18

34 67 23 28 98 15 89 67 28 18

23 34 67 28 98 15 89 67 28 18

23 34 67 28 98 15 89 67 28 18

23 28 34 67 98 15 89 67 28 18

23 28 34 67 98 15 89 67 28 18
23 28 34 67 98 15 89 67 28 18
23 28 34 67 98 15 89 67 28 18

15 23 28 34 67 98 89 67 28 18

15 23 28 34 67 98 89 67 28 18

15 23 28 34 67 89 98 67 28 18

Indah Permatasari, M.Kom. 10


15 23 28 34 67 89 98 67 28 18

15 23 28 34 67 67 89 98 28 18

15 23 28 34 67 67 89 98 28 18

15 23 28 28 34 67 67 89 98 18

15 23 28 28 34 67 67 89 98 18

15 18 23 28 28 34 67 67 89 98

15 18 23 28 28 34 67 67 89 98

Indah Permatasari, M.Kom. 11


Algoritma
• Membuat prosedur untuk menampilkan isi array
• Mendeklarasikan array yang berisi bilangan (yang akan diurutkan)
• Mendeklarasikan bilangan counter sebagai counter perlangan
• Mendeklarasikan perulangan yang memproses data sisip, didalamnya
dideklarasikan counter/perhitungan untuk perulangan yang
memproses pergeseran data
• Mendeklarasikan program utama yang menampilkan isi sesudah
diurutkan

Indah Permatasari, M.Kom. 12


#include <stdio.h>
#include <stdlib.h>

int main()
Programming {
int tabInt[10]={34,67,23,28,98,15,89,67,28,18};
int i;
int data_sisip;
int j;

for(i=0; i<10; i++){


data_sisip = tabInt[i];
j = i-1;

while((data_sisip < tabInt[j]) && (j >= 0)){


tabInt[j+1] = tabInt[j];
j = j-1;
}

tabInt[j+1] = data_sisip;
}
tampilArray(10, tabInt);

return 0;
}

void tampilArray(int n, int array[]){


int i;

for(i=0; i<10; i++){


printf("| %d ", array[i]);
}
}

Indah Permatasari, M.Kom. 13


Selection sort
• Metode pengurutan yang mencari nilai terkecil atau terbesar
bergantung pada pengurutan menaik atau menurun yang kemudian
ditempatkan pada tempat paling depan, kemudian mencari lagi nilai
terkecil atau terbesar kedua sepanjang jumlah elemen array dikurangi
satu, setelah ketemu elemen kedua ditukar dengan nilai minimum,
dst.
• Contoh:
34 67 23 28 98 15 89 67 28 18

• Urutkan secara ascending

Indah Permatasari, M.Kom. 14


34 67 23 28 98 15 89 67 28 18

34 67 23 28 98 15 89 67 28 18

15 67 23 28 98 34 89 67 28 18

15 67 23 28 98 34 89 67 28 18

15 18 23 28 98 34 89 67 28 67

15 18 23 28 98 34 89 67 28 67

15 18 23 28 98 34 89 67 28 67
15 18 23 28 98 34 89 67 28 67
15 18 23 28 98 34 89 67 28 67

15 18 23 28 98 34 89 67 28 67

15 18 23 28 28 34 89 67 98 67

15 18 23 28 28 34 89 67 98 67

Indah Permatasari, M.Kom. 15


15 18 23 28 28 34 89 67 98 67

15 18 23 28 28 34 89 67 98 67

15 18 23 28 28 34 67 89 98 67

15 18 23 28 28 34 67 89 98 67

15 18 23 28 28 34 67 67 98 89

15 18 23 28 28 34 67 67 98 89

15 18 23 28 28 34 67 67 89 98

15 18 23 28 28 34 67 67 89 98

Indah Permatasari, M.Kom. 16


Algoritma
• Membuat prosedur untuk menampilkan array
• Mendeklarasikan array yang berisi bilangan tersebut
• Mendeklarasikan bilangan counter sebagai counter perulangan
• Mendeklarasikan perulanan yang memproses pertukaran nilai elemen
dan pencarian nilai minimum
• Mendeklarasikan program utama yang menampilkan isi sesudah
diurutkan

Indah Permatasari, M.Kom. 17


#include <stdio.h>
#include <stdlib.h>

int main()

Programming {
int tabInt[10]={34,67,23,28,98,15,89,67,28,18};
int i;
int temp;

int minIndeks;
int j;

for(i=0; i<(10-1); i++){


minIndeks = i;

for(j=(i+1); j<10; j++){


if(tabInt[minIndeks]>tabInt[j]){
minIndeks = j;
}
}
temp = tabInt[i];
tabInt[i] = tabInt[minIndeks];

tabInt[minIndeks] = temp;
}
tampilArray(10, tabInt);

return 0;
}

void tampilArray(int n, int array[]){


int i;

printf("Selection Sort\n");

for(i=0; i<10; i++){


printf("| %d ", array[i]);
}
}

Indah Permatasari, M.Kom. 18


Bubble sort
• Metode pengurutan yang menukarkan dua buah elemen secara terus
menerus sampai pengurutan selesai
• Contoh
34 67 23 28 98

• Urutkan secara ascending

Indah Permatasari, M.Kom. 19


34 67 23 28 98

34 67 23 28 98

34 23 67 28 98

34 23 67 28 98

34 23 28 67 98

34 23 28 67 98 23 28 34 67 98

34 23 28 67 98

23 34 28 67 98

23 34 28 67 98

23 28 34 67 98

23 28 34 67 98

23 28 34 67 98

Indah Permatasari, M.Kom. 20


Algoritma
• Membuat prosedur untuk menampilkan isi array
• Mendeklarasikan array yang berisi bilangan tersebut
• Mendeklarasikan bilangan conter sebagai counter perulangan, dan
variable temp untuk menyimpan nilai sementara, dan variable
penanda apakah masih terjadi penukaran atau tidak
• Mendeklarasikan perulangan yang memproses pertukaran nilai
elemen
• Mendeklarasikan program utama yang menampilkan isi sesudah
diurutkan

Indah Permatasari, M.Kom. 21


#include <stdio.h>
#include <stdlib.h>

int main()

Programming {
int tabInt[5] = {34,67,23,28,98};
int i;
int temp;
int tukar;

do{
tukar = 0;
for(i=0; i<(5-1); i++){
if(tabInt[i] > tabInt[i+1]){
temp = tabInt[i];
tabInt[i] = tabInt[i+1];
tabInt[i+1] = temp;
tukar = 1;
}
}
} while(tukar == 1);

tampilArray(5, tabInt);

return 0;
}

void tampilArray(int n, int array[]){


int i;

printf("Bubble Sort\n");

for(i=0; i<5; i++){


printf("| %d ", array[i]);
}
}
Indah Permatasari, M.Kom. 22
Quick sort
• Metode pengurutan yang menjadikan sebuah table data yang akan
diurutkan menjadi dua buah sub bagian yang ditelusuri dari kiri dan
dari kanan
• Mengumpulkan angka yang kecil ke bagian depan atau kiri dan angka
yang lebih besar ke bagian belakang atau kanan
• Dikenal dan benggantung pada pivot, diantaranya:
• Pivot pinggir
• Pivot tengah

Indah Permatasari, M.Kom. 23


Contoh: Pivot Pinggir
34 67 23 28 98

• Urutkan ascending dengan pivot pinggir

34 67 23 28 98

i j

Indah Permatasari, M.Kom. 24


34 67 23 28 98 23 67 34 28 98

i j i j

34 67 23 28 98 23 67 34 28 98

i j i j

23 67 34 28 98 23 28 34 67 98

i j i j

Indah Permatasari, M.Kom. 25


23 28 34 67 98

i j

23 28 34 67 98

i j

23 28 34 67 98

Indah Permatasari, M.Kom. 26


Algoritma
• mendeklarasikan array yang berisi bilangan tersebut
• mendeklarasikan prosedur quick sort
• i merupakan counter untuk penelusuran kiri dan j untuk penelusuran kanan
• perulangan proses pengurutan dilakukan sampai i lebih besar atau sama dengan j
• selama nilai lebih penelusuran kiri lebih kecil dari pivot kanan, penelusuran kiri maju
• jika i lebih kecil j, maka nilai penelusuran kiri ditukar dengan nilai penelusuran kanan,
i maju ke kanan dan j maju ke kiri
• jika sub bagian kiri masih mempunyai elemen lebih dari satu, maka dilakukan
pengurutan pada sub bagian kiri
• jika sub bagian kanan masih mempunyai elemen lebih dari satu, maka dilakukan
pengurutan pada sub bagian kanan
• membuat prosedur untuk menampilkan isi array
• mendeklarasikan program utama yang menampilkan isi sesudah diurutkan

Indah Permatasari, M.Kom. 27


void quickSortPivotPinggir(int left, int right, int
tabInt[]){
int i;
int j;

Programming int pivot;


int temp;

if(left < right){


pivot = left;
#include <stdio.h> i = left;
#include <stdlib.h> j = right;

int main() while(i<j){


{ while((tabInt[i]<=tabInt[pivot]) && (i<right)){
int tabInt[5] = {34,67,23,28,98}; i++;
}
quickSortPivotPinggir(0,4, tabInt); while(tabInt[j] > tabInt[pivot]){
tampilArray(5, tabInt); j--;
}
return 0; if(i<j){
} temp = tabInt[i];
tabInt[i] = tabInt[j];
void tampilArray(int n, int array[]){ tabInt[j] = temp;
int i; }
}
printf("Quick Sort\n"); temp = tabInt[pivot];
tabInt[pivot]=tabInt[j];
for(i=0; i<5; i++){ tabInt[j]=temp;
printf("| %d ", array[i]);
} quickSortPivotPinggir(left, j-1, tabInt);
} quickSortPivotPinggir(j+1, right, tabInt);
}
}

Indah Permatasari, M.Kom. 28


Contoh: Pivot Tenggah
• Acuan pada elemen yang berada di tengah (indeks kiri + indeks kanan
/2)
34 67 23 28 98

34 67 23 28 98

i j

Indah Permatasari, M.Kom. 29


34 67 23 28 98 34 28 23 67 98

i j i j

34 67 23 28 98 34 28 23 67 98

i j i j

34 67 23 28 98 34 28 23 67 98

i j i j

34 67 23 28 98 23 28 34 67 98

i j i j
Indah Permatasari, M.Kom. 30
23 28 34 67 98

i j

23 28 34 67 98

Indah Permatasari, M.Kom. 31


Latihan…
• Bagaimana program pada quick sort pivot tengah?

Indah Permatasari, M.Kom. 32


Efesiensi Algoritma Sorting
• Efesiensi ditujukan pada sisi penggunaan memori sehingga
didapatkan pengurutan dengan pemakaian sumber daya lebih sedikit
• Insertion sort dan selection sort jika dihitung dari banyaknya proses maka
proses perjalanan penelusuran setiap pengulangan adalah (n-1) + … +3+2+1,
dimana n adalah banyak jumlah elemen yang akan diurutkan.
• Jika n adalah 5 maka lama proses adalah 4+3+2+1 = 10 proses penelusuran
• Bubble sort jika dihitung membutuhkan (n-1)2
• Jika n adalah 5 maka lama proses adalah 42 = 16
• Selisih adalah 6 proses, jika hanya adalah 1 user tampaknya tidak
bermasalah namun jika ada 1juta user maka selisih menjadi 6juta. Jika
1 proses 1s, maka perlu 6juta detik = 1.666,67 jam untuk melakukan
proses (?) –optimalization?-

Indah Permatasari, M.Kom. 33


Terima kasih.

Indah Permatasari, M.Kom. 34

Anda mungkin juga menyukai