DATA)
ALGORITMA SORTING
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. berikut ini
merupakan pembahasan umum mengenai jenis-jenis atau algoritma sorting yang telah dijelaskan diatas :
A. Bubble Sort
Bubble Sort merupakan cara pengurutan yangsederhana. Konsep dari ide dasarnya adalah
sepertigelembung air untuk elemen struktur data yangsemestinya berada pada posisi awal. Cara
kerjanyaadalah 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.
Jikaternyata urutannya tidak sesuai dengan pesanan,maka dilakukan pertukaran (swap). Algoritma sortingini
disebut juga dengan comparison sort dikarenakanhanya mengandalkan perbandingan nilai elemen untuk
mengoperasikan elemennya.
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.
B. Selection Sort
Algoritma sorting sederhana yang lain adalahSelection Sort. Ide dasarnya adalah melakukan beberapa
kali pass untuk melakukan penyeleksianelemen struktur data. Untuk sorting ascending(menaik), elemen yang
paling kecil di antara elemenelemenyang belum urut, disimp
an indeksnya,kemudian dilakukan pertukaran nilai elemen denganindeks yang disimpan tersebut dengan
elemen yangpaling depan yang belum urut. Sebaliknya, untuksorting descending (menurun), elemen yang
paling. besar yang disimpan indeksnya kemudian ditukar.
1.
Temukan nilai yang paling minimum (atau sesuaikeinginan) 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.
C. Insertion Sort
Cara kerja insertion sort sebagaimana namanya.Pertama-tama, dilakukan iterasi, dimana di setiap iterasi
insertion sort memindahkan nilai elemen,kemudian menyisipkannya berulang-ulang sampai ketempat yang
tepat. Begitu seterusnya dilakukan. Dariproses iterasi, seperti biasa, terbentuklah bagian yang telah di-sorting
dan bagian yang belum di-sorting.
2.
Bandingkan nilainya dengan elemen sebelumnya.\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).
3.
4.
Jika Ti-1 Ti terpenuhi, tindih nilai di Ti dengan variabel sementara yang disimpan sebelumnya.
5.
D. Merge Sort
Algoritma Merge Sort ditemukan oleh John vonNeumann di tahun 1945. Merge Sort termasuk paradigma
algoritma divide and conquer (kurang lebih berarti: bagi dan atasi). Hal ini dikarenakan algoritma ini
melakukan pembagian struktur data sebelum kemudian dioperasi satu per satu. Intinya, algoritma ini
menggunakan dua ide utama sebagai berikut,
1.
Sebuah list yang kecil membutuhkan langkah yang lebih sedikit untuk pengurutan daripada sebuah list
yang besar.
2.
Untuk membentuk sebuah list terurut dari duabuah list terurut membutuhkan langkah yangl ebih
sedikit daripada membentuk sebuah list terurut dari dua buah list tak terurut. Contoh:hanya diperlukan satu kali
traversal untuk masing-masing list jika keduanya sudahterurut.
\
Algoritma Merge Sort
Algoritma Merge Sort sederhananya, dapat ditulis berikut:
1.
Bagi list yang tak terurut menjadi dua sama panjang atau salah satunya lebih panjang satu elemen.
2.
Bagi masing-masing dari 2 sub-list secara rekursif sampai didapatkan list dengan ukuran 1.
3.
E. 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.
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.
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.
1. Buble\Exchange sort
2. Selection sort
3. Shell Sort
4. Quick sort
Bubble/Exchange sort
Diberi nama "Bubble" karena proses pengurutan secara berangsur-angsur bergera/berpindah ke posisi
yang tepat , seperti gelembung yang keluar dari sebuah gelas bersoda. Bubble sort mengurutkan data
dengan cara membandingkan elemen sekarang dengan elemen berikutnya. jika elemen sekarang lebih
besar dari elemen berikutnya maka elemen tersebut ditukar (untuk pengurutan ascending) jika elemen
sekarang lebih kecil daripada elemen berikutnya, maka kedua elemen tersebut ditukar (untuk
pengurutan descending). algoritma ini seolanh olah menggeser satu per satu elemen dari kenan ke kiri
atau kiri ke kanan. tergantung jenis pengurutannya. Ketika suatu proses telah selesai, maka bubble sort
akan mengalami proses, demikian seterusnya. Bubble sort berhenti jika seluruh array telah diperiksa dan
tidak ada pertukaran lagi yang bisa dilakukan,serta tercapai pengurutan yang telah diinginkan
Contoh pengurutan data yang dilakukan dengan metode bubble sort sebagai berikut :
Proses 1 :
22 10 15 3 8 2
22 10 15 3 2 8
22 10 15 2 3 8
22 10 2 15 3 8
22 10 2 15 3 8
22 2 10 15 3 8
2 22 10 15 3 8
Pengecekan dimulai dari data yang paling akhir, kemudian dibandingkan dengan data di depannya,jika
data didepannya lebih besar maka akan di tukar.
Proses 2:
2 22 10 15 3 8
2 22 10 15 3 8
2 22 10 3 15 8
2 22 3 10 15 8
2 3 22 10 15 8
pengecekan dilakukan sampai dengan data ke-2 karena data pertama pasti sudah paling kecil.
Proses 3 :
2 3 22 10 15 8
2 3 22 10 8 15
2 3 22 8 10 15
2 3 8 22 10 15
Proses 4 :
2 3 8 22 10 15
2 3 8 22 15 10
2 3 8 15 22 10
Proses 5 :
2 3 8 15 22 10
2 3 8 15 10 22
Pengurutan berhenti.
Contoh Program :
#include
#include
#include
bubble_acak()
{
clrscr();
int arr[1000];
int x, i; //untuk array
int s, t, temp; //untuk sorting
//input jumlah data yang diproses
cout<<"angka yang akan dimasukkan : "; cin>>x;
//input nilai masing" array
srand(time(NULL));
for (i=0; i
arr[i] = rand() %1000;
//output nilai" array
clrscr();
cout<<"====== array ======"<
arr[t] = temp;
}
}
}
cout<<"setelah sorting :"<
for (i=0; i
cout<
//mission complete
getch();
}
main ()
{
int pilih;
char ulang;
do
{
clrscr ();
cout<<"tekan 1 : bilangan yang disorting dimasukan secara acak"<
cout<<"tekan 2 : bilangan yang disorting dimasukan secara manual"<
cout<<"masukkan pilihan : "; cin>>pilih;
switch (pilih)
{
case 1:
bubble_acak();
break;
case 2:
bubble_manual();
break;
default:
clrscr();
cout<<"\"maaf\""<
cout<<"\"pilihan yang dimasukkan salah\"";
break;
}
cout< "; cin>>ulang;
}
Dalam Procedure Pascal :
Procedure Bubble(Var Temp : Data; JmlData : Integer);
Var I,J : Integer;
Begin
For I:=2 To JmlData Do
For J:=JmlData DownTo I Do
If Temp[J] < Temp[J-1] Then
{Untuk Descending
>}
SWAP(Temp[J], Temp[J-1]);
End;
Selection Sort
Cara kerja metode ini didasarkan pada pencarian elemen dengan nilai terkecil. kemudian dilakukan
penukaran dengan elemen ke-I. Secara singkat metode ini bisa dijelaskan sebagai berikut. Pada langkah
pertama, dicari data yang terkecil dari data pertama sampai terakhir. Kemudian data tersebut kita tukar
dari data pertama. Dengan demikian, data pertama sekarang mempunyai nilai paling kecil dibanding
dengan data lain. Pada langkah kedua, data terkecil kita cari mulai dari data kedua sampai data terakhir.
Data terkecil yang kita peroleh kita tukar dengan data kedua. Demikian seterusnya sampai seluruh data
terurut.
Shell Sort
Metode
elemen
berikut.
dengan
ini dikembangkan oleh Donald L. Shell pada tahun 1959. Dalam metode ini jarak antara dua
yang dibandingkan dan ditukarkan tertentu. Secara singkat metode ini dijelaskan sebagai
Pada langkah pertama, kita ambil elemen pertama dan kita bandingkan dan kita bandingkan
elemen pada jarak tertentu dari elemen pertama tersebut. Kemudain elemen kedua kita
bandingkan dengan eleen lain dengan jarak yang sama seperti jarak yang sama seperti diatas. Demikian
seterusnya sampai seluruh elemen dibandingkan. Pada langkah kedua proses diulang dengan langkah
yang lebih kecil, pada langkah ketiga jarak tersebut diperkecil lagi seluruh proses dihentikan jika jarak
sudah sama dengan satu.
End;
Quick Sort
Metode ini dikembangkan oleh CAR Hoare. Secara garis besar metode ini dijelaskan sebagai berikut.
Misalnya kita ingin mengurutkan data A yang membunyai N elemen. Kita pilih sembarang elemen dari
data tersebut, biasanya elemen pertama, misalnya X. Kemudain semua elemen tersebut disusun dengan
menempatkan X pada posisi J sedemikian rupa shingga elemen ke 1 sampai ke J-1 mempuyai nilai lebih
besar dari X. Sampai berikutnya diulang untuk setiap sub data.
SELECTION SORT
POSTED BY SOVYAN NURZAMAN ON 04.04 1 COMMENT
SELECTION
SORT
Pengertian dari selection sort adalah mencari elemen yang tepat untuk diletakkan di posisi yang telah
diketahui,
dan
meletakkannya
di
posisi
tersebut
setelah
data
tersebut
ditemukan,
Selection Sort Membandingkan elemen yang sekarang dengan elemen yang berikutnya sampai dengan
elemen yang terakhir. Jika ditemukan elemen lain yang lebih kecil dari elemen sekarang
maka
dicatat
posisinya
dan
kemudian
ditukar.
Pengurutan data dalam struktur data sangat penting untuk data yang beripe data numerik ataupun
karakter.Pengurutan dapat dilakukan secara ascending (urut naik) dan descending (urut turun)
Pengurutan (Sorting) adalah proses menyusun kembali data yang sebelumnya telah disusun dengan
suatu
pola
tertentu,
sehingga
tersusun
secara
teratur
menurut
aturan
tertentu.
Contoh:
Data
Acak
:
5
6
8
1
3
25
10
Ascending
:
1
3
5
6
8
10
25
Descending
:
25
10
8
6
5
3
1
Konsep Selection Sort Algoritma pengurutan sederhana salah satunya adalah Selection Sort. Ide dasarnya
adalah 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.
Selection Sort diakui karena kesederhanaan algoritmanya dan performanya lebih bagus daripada
algoritma lain yang lebih rumit dalam situasi tertentu. Algoritma ini bekerja sebagai berikut:
1. Mencari nilai minimum (jika ascending) atau maksimum (jika descending) dalam sebuah list
2.
Menukarkan
nilai
ini
dengan
elemen
pertama
list
3. Mengulangi langkah di atas untuk sisa list dengan dimulai pada posisi kedua. Secara efisien kita
membagi list menjadi dua bagian yaitu bagian yang sudah diurutkan, yang didapat dengan membangun
dari kiri ke kanan dan dilakukan pada saat awal, dan bagian list yang elemennya akan diurutkan.
Simulasi Selection Sort Untuk lebih jelasnya, perhatikanlah simulasi Selection Sort Ascending berikut
dengan
menggunakan
larik
5
1
43
27
6
18
33
Dalam satu kali, ditentukan elemen yang paling kecil di dalam bagian list yang belum urut
. Elemen yang paling kecil ini, diwarnai merah . Untuk bagian larik yang telah diurutkan diberi warna
kuning.
43
27
18
33
43
27
18
33
43
27
18
33
27
43
18
33
18
43
27
33
18
27
43
33
18
27
33
43
Kompleksitas Selection Sort Algoritma di dalam Selection Sort terdiri dari kalang bersarang. Dimana
kalang tingkat pertama (disebut pass) berlangsung N-1 kali. Di dalam kalang kedua, dicari elemen
dengan nilai terkecil. Jika didapat, indeks yang didapat ditimpakan ke variabel min. Lalu dilakukan proses
penukaran Begitu seterusnya untuk setiap Pass. Pass sendiri makin berkurang hingga nilainya menjadi
semakin
kecil.
Stabilitas Selection Sort Selection Sort ini pada dasarnya merupakan algoritma sorting yang tidak stabil,
namun
dapat
diubah
menjadi
stabil
pada
kasus
tertentu
Algoritma sorting yang stabil akan mampu memanfaatkan relatifitas antar record melalui definisi di tiaptiap keys yang dimiliki oleh record tersebut. Misalkan ada dua record R dan S dengan key yang sama dan
dengan ketentuan R muncul sebelum S, maka pada hasil output akan muncul R sebelum S.
Namun ketika terdapat elemen yang sama (tidak dapat dibedakan) pada umumnya terdapat pada tipe
data integer,stabilitas akan kembali di utamakan.
yaitu :
- kemungkinan terbaik (best case)
hal ini terjadi jika data yang dicari terletak pada indeks array terdepan, sehingga waktu yang
dibutuhkan untuk mencari data sedikit.
- kemungkinan terburuk (worst case)
hal ini terjadi jika data yang dicari terletak pada indeks array terakhir, sehingga waktu yang
dibutuhkan untuk mencari data sangat lama.
Dalam pencarian data menggunakan sequential search, peningkatan efisiensi pencarian dapat
dilakukan dengan cara menghentikan looping apabila data yang dicari sudah ketemu dengan
menggunakan BREAK.
Disebut juga sebagai metode pencarian urut adalah metode pencarian yang paling mudah.
Bayangkan saja jika anda dihadapkan pada sebuah rak buku, dan anda diberi tugas untuk mencari
sebuah buku dari rak tersebut. Sudah tentu anda akan mulai mencarinya satu persatu entah itu
dari atas atau dari bawah sampai buku yang dimaksud ketemu.
Singkatnya sequential search memiliki proses sebagai berikut:
Tentukan banyaknya data yang akan di olah, missal banyak data adalah N.
Tentukan data apa yang akan dicari, missal data yang akan dicari adalah C.
Deklarasikan sebuah counter untuk menghitung banyak data yang ditemukan, missal counternya
adalah K.
Inisialisasikan K =0
Lakukanlah perulangan sebanyak N kali
Dalam tiap proses perulangan tersebut periksalah apakah data yang sedang
diolah sama dengan data yang dicari.
Jika ternyata sama K=K+1
Jika tidak, lanjutkan proses perulangan .
Setelah proses perulangan berhenti, periksalah nilai K.
Jika nilai K lebih dari 0, artinya data yang dicari ada dalam data /array dan tampilkan nilai K ke
layer sebagai jumlah data yang ditemukan.
Jika nilai K=0, artinya data yang dicari tidak ditemukan dalam data / array dan tampilkan ke
layar bahwa data tidak ditemukan
Proses selesai.
Dapat disimpulkan bahwa sequential search, akan mencari data dengan cara membandingkannya
satu-persatu dengan data yang ada. Prosesnya tentu saja akan singkat jika data yang diolah
sedikit, dan akan lama jika data yang diolah banyak. Disarankan proses ini digunakan pada jumlah
data yang sedikit saja.
2. Binary Search
Binary search adalah teknik pencarian data dengan cari membagi dua data setiap kali proses
pengurutan.
data[4] < 3
data[5] < 10
data[6] < 12
Lakukan perulangan dengan menggunakan for (int i=0;i<intarray.length;i++);
if (data[i] = bil) then
tampikan (angka ketemu = )
else
tampilkan (angka tidak ketemu);
end_if
SOURCE CODE
package javaapplication1;
import java.util.Scanner;
public class Sequential
{
public static void main(String[] args)
{
int j, angka;//input variebel,initialize angka
boolean found=false;
int[] intarray={7,5,8,3,10,12};//memasukkan angka pada array
for (int i=0;i<intarray.length;i++)//lakukan perulangan sekali pada elemen arrray
{
System.out.print(intarray[i]+" ");//for aligment
}
Scanner sc=new Scanner(System.in);
System.out.print("\nMasukkan angka yang ingin dicari = ");//menampilkan angka yang dicari
angka=sc.nextInt();
for (j=0;j<intarray.length;j++)//lakukan perulangan pada array
{
if (intarray[j]==angka)//
{
found=true;//Recursive call
break;//menghentikan pengulangan
}
}
if (found)//menyatakan pernyataan apabila ditemukan
{
System.out.println("angka ketemu = " +intarray[j]);//tampilkan hasil
}
else//jika tidak ditemukan
{
System.out.println("angka tidak ketemu ");//tampilkan hasil
}}}
2. Binary Search
ALGORITMA
{Inisialisasi Nilai array yang ingin dicari}
array ={25,30,35,40,45};
Terendah = 1.
Tertinggi = 5.
While terendah nilai (tengah). Then terendah = tengah + 1.
Else tertinggi = tengah 1.
end
end
end
SOURCE CODE
package javaapplication1;
import java.util.Scanner;
public class BinarySearch {
public static void main (String[] args){
int v, angka;//input variebel,initialize angka
boolean notfound=true;
int[] intarray={25,30,35,40,45};//memasukkan angka pada array
for (int x=0;xbatasAtas)//pernyataan kedua
{
System.out.println(tidak ditemukan +angka);//menampilkan hasil
break;//menghentikan pengulangan
}
else//pernyataan lebih dari satu data
{
if (intarray[posisiSekarang]<angka)//pernyataan ketiga
{
batasBawah = posisiSekarang + 1;//Recursive call
}
else
{
batasAtas = posisiSekarang 1;//Recursive call
}}}}}
SEQUENTIAL SEARCH
Algoritma sequential search adalah salah satu algoritma yang digunakan untuk memecahkan masalah
pencarian data pada suatu data larik/array. Cara kerja dari algoritma ini adalah dengan menelusuri
elemen-elemen array dari awal sampai akhir, dimana data tidak perlu diurutkan terlebih dahulu.
Kemungkinan terbaik(best case) dari algoritma ini adalah jika data yang dicari berada pada elemen array
yang terdepan sehingga waktu yang dibutuhkan untuk pencarian data semakin singkat. Sebaliknya, akan
mencapai kondisi terburuk(wors case) apabila data yang dicari berada pada elemen akhir.
Metode pencarian beruntun atau linear (sequential search) dapat dipergunakan apabila:
1.
2.
Nilai-nilai tersebut sudah berurutan, tetapi struktur data yang dipergunakan untuk
BINARY SEARCH
Binary search adalah algoritma pencarian untuk data yang terurut. Pencarian dilakukan dengan cara
menebak apakah data yang dicari berada ditengah-tengah data, kemudian membandingkan data yang
dicari dengan data yang ada ditengah. Bila data yang ditengah sama dengan data yang dicari, berarti data
ditemukan. Namun, bila data yang ditengah lebih besar dari data yang dicari, maka dapat dipastikan
bahwa data yang dicari kemungkinan berada disebelah kiri dari data tengah dan data disebelah kanan data
tengah dapat diabai.Upper bound dari bagian data kiri yang baru adalah indeks dari data tengah itu
sendiri. Sebaliknya, bila data yang ditengah lebih kecil dari data yang dicari, maka dapat dipastikan
bahwa data yang dicari kemungkinan besar berada disebelah kanan dari data tengah. Lower bound dari
data disebelah kanan dari data tengah adalah indeks dari data tengah itu sendiri ditambah 1. Demikian
seterusnya.
Metode pencarian beruntun (sequential) maupun metode pencarian biner (binary search)dapat
dipergunakan, jika:
1.
2.
Nilai-nilai tersebut disusun ke dalam bentuk array atau struktur data sejenis yang masing-
masing nilai tersimpan dalam bagian-bagian yang mempunyai indeks yang unik dan indeksnya
berurutan dari yang paling kecil hingga yang paling besar (bersifat ordinal).