• Tidak ada hasil yang ditemukan

SORTING (Pengurutan)

N/A
N/A
Protected

Academic year: 2021

Membagikan "SORTING (Pengurutan)"

Copied!
15
0
0

Teks penuh

(1)

Siti yuliyanti Page 1

SORTING (Pengurutan)

Proses pengurutan banyak ditemukan dalam komputer, karena bertujuan untuk memudahkan dan mempercepat pencarian data.Merupakan proses penyusunan kembali sekumpulan objek ke dalam suatu urutan. Dengan tujuan untuk mempermudah pencarian , mempercepat keberadaan data terkecil atau terbesar.Proses dalam pengurutan adalah dengan perbandingan dan pertukaran data. Didalam

pengurutan ada istilah ascending(pengurutan data dari yang terkecil ke terbesar) dan descending(pengurutan dari data terbesar ke terkecil).

17 7 12 1 8

Data tidakterurut

1 7 8 12 17

Terurut ascending

Terurut ascending

Berikut metode pengurutan, diantaranya :

1. Bubble Sort

2. Selection Sort

3. Insertion Sort

4. Quick Sort

5. Heap Sort

17 12 8 7 1

(2)

Siti yuliyanti Page 2

a. Sorting dengan bubble sort

Metode bubble sort, merupakan metode tersederhana untuk melakukan pengurutan data, tetapi memiliki kinerja yang terburuk untuk data yang besar. Pengurutan dilakukan dengan membandingkan sebuah bilangan dengan seluruh bilangan yang terletak sesudah bilangan tersebut.Penukaran dilakukan

kalau suatu criteria dipenuhi. Sebagai contoh, terdapat kumpulan seperti berikut. 25 57 48 37 12 92 80 33

Contoh proses pengurutan dengan urut naik ditunjukkan pada gambar :

Tahap1Tahap 2

Jikajumlah data adalah n, makaterjadi n-1 tahappengurutan.Berartipadacontoh di diatasdiperlukan 7 tahappengurutan.Gambar 11.4 memperlihatkansetelah 7 tahappengurutandilakukan.

Keadaan di setiaptahappengurutanImplementasi dalam Algoritma

Algoritma : SUBRUTIN bubble_sort(L,n) Untuktahap = 1 s/d n-1 Untuk j← 0 s/d n-tahap-1 Jika L[j] > L[j+1] MAKA // Lakukanpenukaran tmp ←L[j] L[j] ←L[j+1] L[j+1] ←tmp AKHIR – JIKA AKHIR – UNTUK AKHIR – UNTUK AKHIR – SUBRUTIN

(3)

Siti yuliyanti Page 3 Contoh sederhana :

Data awal 7 2 4 30

Tahap 1 :

7 2 4 30

tidak terjadi pertukaran

7

2 4

terjadi pertukaran 2 dan 4

4

2 30

terjadi pertukaran 2 dan 30

30

2 

Maka hasil tahapan 1 :

7 4 30 2

Tahap 2 :

7 4 30 2

tidak terjadi pertukaran

7

4 30

terjadi pertukaran 30 dan 2

30

4 2

tidak terjadi pertukaran

4

2 

Maka hasil tahapan 1 :

7 30 4 2

Tahap 3 :

7 30 4 2

terjadi pertukaran

30

7 4

terjadi pertukaran 2 dan 4

7

4 2

Maka hasil tahapan 1 :

30 7 4 2

Jika

Data awal  7 2 4 30

Maka tahapan yg dilalui adalah

tahapan 1 :

7 4 30 2

tahapan 1 :

7 30 4 2

(4)

Siti yuliyanti Page 4 Implementasi dalam coding

/* sorting dengan metode bubble sort secara ascending*/ #include <stdio.h>

#include <conio.h>

voidtampilkan_larik(int data[], int n) { int i; for(i=0;i<n;i++) printf("%d ", data[i]); printf("\n"); } voidbuble_sort(int data[],int n) { inttahap,j,tmp; for (tahap=1;tahap<n;tahap++) { for (j=0;j<n-tahap;j++)

if (data[j]>data[j+1])// jika descending diganti tanda dengan < { //tukarkan tmp=data[j]; data[j]=data[j+1]; data[j+1]=tmp; } printf("hasiltahap %d : ", tahap); tampilkan_larik (data,n); } } int main() { intjum_data=4; int i; int data[]={7,2,4,30}; buble_sort(data, jum_data); //hasilpengurutan printf("\nHasilPengurutan: \n"); tampilkan_larik(data,jum_data); getche(); }

(5)

Siti yuliyanti Page 5

b. Sorting dengan Selection Sort

Pemgurutan seleksi (selection sort) mempunyai mekanisme Misalnya untuk putaran pertama, akan dicari data dengan nilai terkecil dan data ini akan ditempatkan di indeks terkecil (data[0]), pada putarankedua akan dicari data keduaterkecil, danakan ditempatkan di indeks kedua (data[1]). Selama proses, pembandingan dan pengubahan hanya dilakukan pada indeks pembanding saja, pertukaran data

secara fisik terjadi pada akhir proses.

67 25 35 35 25 67 27 27 26 26 25 25 26 26 67 27 27 67 35 35

Proses pengurutan menggunakan metode selection sort secara terurut naik :

1. Mencari data terkecil dari data pertama sampai dengan data yang terakhir. kemudian ditukar posisinya dengan data pertama.

2. Mencari data terkecil dari data kedua sampai dengan data terakhir, kemudian ditukar posisinya dengan data kedua.

3. Mencari data terkecil dari data ketiga sam[ai data terakhir, kemudian ditukar posisimya dengan data ketiga.

4. Begitu seterusnya sampai semua data terurut naik. Apabila terdapat n buah data yang akan diurutkan, maka membutuhkan (n-1) langkah pengurutan, dengan data terakhir, yaitu data ke n tidak perlu diurutkan karena hanya tinggal data satu-satunya.

posAwal Tahap 1 Tahap2 Tahap3 Tahap4 posMin posAwal posMin posAwal posMin posAwal posMin

(6)

Siti yuliyanti Page 6

#include <stdio.h> #include <conio.h> int data[10],data2[10]; int n;

void tukar(int a, int b) { int t; t = data[b]; data[b] = data[a]; data[a] = t; } void selection_sort() { int pos,i,j; for(i=1;i<=n-1;i++) { pos = i; for(j = i+1;j<=n;j++)

{ if(data[j] < data[pos]) pos = j; } if(pos != i) tukar(pos,i);

} }

int main() {

printf("===PROGRAM SELECTION SORT==="); //Input Data

printf("Masukkan Jumlah Data : "); scanf("%d", &n); for(int i=0;i<n;i++)

{

printf("Masukkan data ke %d " , i); scanf("%d", &data[i]); data2[i]=data[i];

}

selection_sort(); printf("\n\n"); //tampilkan data

printf("Data Setelah di Sort : "); for(int i=1; i<=n; i++)

{ printf("%d ",data[i]); } printf("\n\nSorting Selesai"); getche(); }

(7)

Siti yuliyanti Page 7

c. Sorting dengan Insertion Sort

Metode Insertion Sort adalah dimulai dari data ke-2 kemudian disisipkan pada tempat yang sesuai. Data pada posisi pertama diandaikan memang sudah pada tempatnya. Ilustrasinya mirip seperti saat menyisipkan kartu di permainan kartu. Seperti ketika Anda mengambil setiap kartu, kemudian Anda masukkan kartu ke posisi yang benar di tangan anda hingga terorganisir urutannya dengan rapi. Insertion Sort membagi array menjadi dua sub-array. Array sub pertama(diibaratkan kartu yang ditangan anda) yang diurutkan dan peningkatan ukuran dan semacamnya. Sub array kedua(seperi kartu yang akan diambil) kartu yang belum terurutkan, mengandung semua elemen yang belum dimasukkan ke dalam array sub pertama dan berkurang sesuai ukuran. Agar lebih mudah dalam memahaminya silahkan perhatikan ilustrasi gambar berikut ini:

(8)

Siti yuliyanti Page 8

Maka implementasi dalam program yaitu :

#include <stdio.h> #include <conio.h> int data[10],data2[10]; int n;

void tukar(int a, int b) { int t; t = data[b]; data[b] = data[a]; data[a] = t; }

(9)

Siti yuliyanti Page 9 void insertion_sort() { int temp,i,j; for(i=1;i<=n;i++) { temp = data[i]; j = i -1; while(data[j]>temp && j>=0) { data[j+1] = data[j]; j--; } data[j+1] = temp; } } void main() {

printf("===PROGRAM INSERTION SORT==="); //Input Data

printf("Masukkan Jumlah Data : "); scanf(“%d”,&n); for(int i=1;i<=n;i++)

{

printf("Masukkan data ke %d :",i); scanf("%d",&data[i]); data2[i]=data[i]; } insertion_sort(); printf("\n\n"); //tampilkan data

printf("Data Setelah di Sort : "); for(int i=1; i<=n; i++)

{ scanf("%d", data[i]); } printf("\n\nSorting Selesai"); getche(); }

(10)

Siti yuliyanti Page 10

D. Sorting dengan Quick Sort

Quick sort adalah salah satu metode pengurutan dalam bahasa pemrograman. Proses sorting atau pengurutan dilakukan berdasarkan metode divide and conqueror. Quick sort ini mengurutkan data dengan sangat cepat. Tetapi tentu saja quick sort ini memiliki kekurangan. Misalnya, proses sorting yang dilakukan secara rekursif. Walaupun prosesnya sangat cepat, tapi menghabiskan memori yang besar jika data yang diurut banyak. Selain itu, quick sort juga tidak cocok jika digunakan untuk mengurutkan data dalam tabel yang berukuran kecil.

Quick Sort merupakan Algortima Pembagi. Pertama sekali quicksort membagi list yang besar menjadi dua buah sub list yang lebih kecil: element kecil dan element besar. Quicksort kemudian dapat menyortir sub list itu secara rekursif.

Langkah-Langkah pengerjaannya ialah:

1. Ambil sebuah elemen, yang disebut dengan pivot, pada sebuah daftar.

2. Urutkan kembali sebuah list sehingga elemen dengan nilai yang kecil dari pivot berada sebelum pivot, sedangkan seluruh element yang memiliki nilai yang lebih besar dari pivot berada setelahnya (nilai yang sama dapat berada pada pivot setelahnya). Setelah pemisahan, pivot berada pada posisi akhirnya. Operasi ini disebut Partition.

3. Sub list kemudian disortir secara recursif dari elemen yang lebih kecil dan sub list dari elemen yang lebih besar.

Cara pengambilan pivot didapat dari L = 1 (data 1) dijumlahkan dengan R = N(jumlah data), kemudian dibagi 2. Misal data : 1 2 3 4 5 6 7 16 12 23 50 19 49 31 x ← data*(L + R) div 2+ x ← data*(1 + 7) div 2] x ← data*8 div 2+ x ← data*4+

(11)

Siti yuliyanti Page 11 Bila terdapat data acak sebagai berikut :

16 12 23 50 19 49 31

Data tersebut akan diselesaikan dengan metode quicksort secara descending.

Langkah 1 :

Tentukan pivot pada array. Misalkan pivot adalah x. x ← data*(L+R) div 2+ x ← data*(1 + 7) div 2+ x ← data*8 div 2+ x ← data*4+ i ← L j ← R i → ← j 1 2 3 4 5 6 7 16 12 23 (50) 19 49 31

i bergerak dari sudut kiri ke kanan sampai mendapatkan nilai yang <= pivot. j bergerak dari sudut kanan ke kiri sampai mendapatkan nilai yang >= pivot. i berhenti pada data ke-1 krn langsung menemukan nilai yang lebih kecil dari pivot. j berhenti pada data ke-4 krn tidak menemukan nilai yang lebih besar daripada pivot.

Karena i < j maka data yang ditunjuk oleh i ditukar dengan data yang ditunjuk oleh j sehingga menjadi:

50 12 23 16 19 49 31

Langkah 2 :

data 1 2 3 4 5 6 7 50 12 23 (16) 19 49 31 i → ← j

i berhenti pada data ke-2 karena menemukan nilai yang lebih kecil dari pivot.

j berhenti pada data ke-7 karena langsung menemukan nilai yang lebih besar dari pivot.

Karena i < j maka data yang ditunjuk oleh i ditukar dengan data yang ditunjuk oleh j sehingga menjadi:

50 31 23 16 19 49 12

Langkah 3 :

Data 1 2 3 4 5 6 7 50 31 23 (16) 19 49 12 i → ← j

(12)

Siti yuliyanti Page 12 j berhenti pada data ke-6 karena menemukan nilai yang lebih besar dari pivot.

Karena i < j maka data yang ditunjuk oleh i ditukar dengan data yang ditunjuk oleh j sehingga menjadi: 50 31 23 49 19 16 12 

Langkah 4 :

Data 1 2 3 4 5 6 7 50 31 23 (49) 19 16 12 i → ← j

i berhenti pada data ke-2 karena menemukan nilai yang lebih kecil dari pivot. j berhenti pada data ke-4 karena tidak menemukan nilai yang lebih besar dari pivot.

Karena i < j maka data yang ditunjuk oleh i ditukar dengan data yang ditunjuk oleh j sehingga menjadi: 50 49 23 (31) 19 16 12

Langkah 5 :

Data 1 2 3 4 5 6 7 50 49 23 (31) 19 16 12 i → ← j

i berhenti pada data ke-3 karena menemukan nilai yang lebih kecil dari pivot. j berhenti pada data ke-4 karena tidak menemukan nilai yang lebih besar dari pivot.

Karena i < j maka data yang ditunjuk oleh i ditukar dengan data yang ditunjuk oleh j sehingga menjadi: 50 49 31 23 19 16 12

Proses pengurutan berhenti karena i tidak menemukan data yang lebih kecil dari x dan j tidak menemukan data yang lebih besar dari x.

(13)

Siti yuliyanti Page 13 Berikut algoritmannya :

(14)

Siti yuliyanti Page 14

e. Sorting dengan Heap Sort

Heap adalah sebuah Tree yang memenuhi syarat Binary Tree secara lengkap, terdiri atas internal node dan external node dan setiap internal node menyimpan sebuah nilai. Nilai-nilai pada setiap node-nya memenuhi syarat Heap Minimum atau Heap Maksimum.

Heap Maksimum jika nilai root lebih besar dari nilai left child dan right child, sedangkan Heap Minimum jika nilai root lebih kecil dari nilai left child dan right child.

 Binary heap digunakan sebagai struktur data dalam algoritma Heap-Sort

 Sebagaimana diketahui, ketika suatu Heap dibangun maka kunci utamanya adalah: node atas selalu mengandung elemen lebih besar dari kedua node dibawahnya (MaxHeap) atau sebaliknya (MinHeap)

 Apabila elemen berikutnya ternyata lebih besar dari elemen root, maka harus di “swap”. (MaxHeap)

 Root dari suatu Heap sort mengandung elemen terbesar dari semua elemen dalam Heap (MaxHeap) atau sebaliknya (MinHeap)

Ilustrasi Heap (Insert)

Jika ingin memasukkan atau menyisipkan node baru, letakkan pada

sebuah memori kosong bagian akhir.

Setelah itu, bandingkan node baru dengan root (parent) nodenya.

(15)

Siti yuliyanti Page 15

Jika node baru lebih kecil daripada root (parent) nodenya, maka

tukar nilainya. Selanjutnya bandingankan dengan root (parent) nodenya lagi, jika node baru lebih besar daripada root (parent) node, maka

nilainya tidak ditukar.

Penghapusan node, dilakukan pada root (parent) node. Kosongkan root (parent)

nodenya.

Selanjutnya, isikan dengan isi dari node yang posisinya paling

akhir.

Bandingkan root (parent) nodenya dengan child node yang paling kiri terlebih dahulu, jika ada diantara child node nilainya lebih kecil dari root node,

maka tukar nilainya.

Lakukanlah perbandingan dengan semua node sehingga datanya terurut dengan baik sesuai dengan syarat minimum head atau maksimum head.

Gambar

Ilustrasi Heap (Insert)

Referensi

Dokumen terkait

Sedangkan Quick Sort akan membandingkan suatu elemen (pivot) dengan elemen yang lain sehingga elemen-elemen lain yang lebih kecil dari pivot tersebut terletak di sebelah kirinya

Cara kerja algoritma ini yaitu pengurutan dengan penyisipan bekerja dengan cara menyisipkan masing-masing nilai di tempat yang sesuai (di antara elemen yang lebih kecil

Dimulai dari data terakhir bergerak dari kanan ke kiri (j dikurangi 1), dilakukan pembandingan data sampai ditemukan data yang nilainya lebih kecil dari 12 yaitu 3 dan kedua

elemen pertama/terakhir dengan elemen sebelumnya/sesudahnya , kemudian elemen tersebut itu akan menjadi pusat (pivot) untuk dibandingkan dengan elemen. sebelumnya/sesudahnya

Pada akhir langkah N-1, elemen L[N-1] berisi harga minimum ke-(N-1) dan larik L[1..N-1] terurut menaik, sehingga elemen yang tersisa adalah L[N] yang tidak perlu lagi diurutkan

Pada akhir langkah N-1, elemen L[N-1] berisi harga minimum ke-(N-1) dan larik L[1..N-1] terurut menaik, sehingga elemen yang tersisa adalah L[N] yang tidak perlu lagi diurutkan

Membandingkan suatu elemen (disebut pivot) dengan elemen yang lain dan menyusunnya sedemikian rupa sehingga elemen- elemen lain yang lebih kecil daripada pivot

Algoritma insertion sort pada dasarnya memilah data yang akan urutkan menjadi 2 bagian, yang belum diurutkan dan yang sudah diurutkan.. Elemen pertama diambil dari bagian array yang