Shorting
Shorting
SORTING
DISUSUN OLEH
FEMBI REKRISNA GRANDEA PUTRA
M0513019
JURUSAN INFORMATIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS SEBELAS MARET
SURAKARTA
MEI 2014
BAB I
PENDAHULUAN
Sorting atau pengurutan data adalah proses yang sering harus dilakukan dalam
pengolahan data. Sort dalam hal ini diartikan mengurutkan data yang berada dalam suatu
tempat penyimpanan, dengan urutan tertentu baik urut menaik (ascending) dari nilai terkecil
sampai dengan nilai terbesar, atau urut menurun (descending) dari nilai terbesar sampai dengan
nilai terkecil. Sorting adalah proses pengurutan. Berikut ini beberapa metode sorting yaitu:
1. BUBBLE SORT
Bubble sort adalah proses pengurutan sederhana yang bekerja dengan cara berulang
kali membandingkan dua elemen data pada suatu saat dan menukar elemen data yang
urutannya salah. Ide dari bubble sort adalah gelembung air yang akan “mengap ung”
untuk tabel yang terurut menaik (ascending). Elemen bernilai kecil akan “diapungka n”
(ke indeks terkecil), artinya diangkat ke “atas” (indeks terkecil) melalui pertukaran.
Karena algoritma ini melakukan pengurutan dengan cara membandingkan elemen-
elemen data satu sama lain, maka bubble sort termasuk ke dalam jenis algoritma
comparison-based sorting.
2. SELECTION SORT
3. INSERTION SORT
4. SHELL SORT
Metode ini disebut juga dengan metode pertambahan menurun (diminishing
increment). Metode ini dikembangkan oleh Donald L. Shell pada tahun 1959, sehingga
sering disebut dengan metode shell sort. Metode ini mengurutkan data dengan cara
membandingkan suatu data dengan data lain yang memiliki jarak tertentu, kemudian
dilakukan penukaran bila diperlukan. Proses pengurutan dengan metode shell dapat
dijelaskan sebagai berikut: Pertama-tama adalah menentukan jarak mula-mula dari data
yang akan dibandingkan, yaitu N/2. Data pertama dibandingkan dengan data dengan
jarak N/2. Apabila data pertama lebih besar dari data ke N/2 tersebut maka kedua data
tersebut ditukar. Kemudian data kedua dibandingkan dengan jarak yang sama yaitu N/2.
Demikian seterusnya sampai seluruh data dibandingkan sehingga semua data ke-j selalu
lebih kecil daripada data ke-(j+N/2).Pada proses berikutnya, digunakan jarak (N/2)/2 atau
N/4. Data pertama dibandingkan dengan data dengan jarak N/4. Apabila data pertama
lebih besar dari data ke N/4 tersebut maka kedua data tersebut ditukar. Kemudian data
kedua dibandingkan dengan jarak yang sama yaitu N/4. Demikianlah seterusnya hingga
seluruh data dibandingkan sehingga semua data ke-j lebih kecil daripada data ke-(j+N/4).
Pada proses berikutnya, digunakan jarak (N/4)/2 atau N/8. Demikian seterusnya sampai
jarak yang digunakan adalah 1.
5. MERGE SORT
6. QUICK SORT
Quick sort adalah metode pengurutan data yang dikemukakan pertama kali oleh C.
A. R. Hoare pada tahun 1962. Metode ini menggunakan strategi “pecah-pecah” dengan
mekanisme seperti berikut: Larik L[p..r] (dengan indeks terkecil adalah p dan indeks
terbesar yaitu r) disusun ulang (dipartisi) menjadi dua buah larik A[p..q] dan A[q+1..r]
sehingga setiap elemen dalam A[q+1..r]. Selanjutnya kedua larik tersebut diurutkan
secara rekursif. Dengan sendirinya kombinasi kedua larik tersebut membentuk larik
dengan data yang telah urut.
BAB II
IMPLEMENTASI
1. BUBBLE SORT
public void bubbleSort(int n) {
int[] arr = generateRandom(n);
boolean swapped = true;
int j = 0;
int tmp;
while (swapped) {
swapped = false;
j++;
for (int i = 0; i < arr.length - j; i++) {
if (arr[i] > arr[i + 1]) {
tmp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = tmp;
swapped = true;
}
}
}
for (int x = 0; x < n; x++) {
System.out.print(arr[x] + " ");
}
}
2. SELECTION SORT
public void selectionSort(int n) {
int i, j, minIndex, tmp;
int[] arr = generateRandom(n);
for (i = 0; i < n - 1; i++) {
minIndex = i;
for (j = i + 1; j < n; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
if (minIndex != i) {
tmp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = tmp;
}
}
for (int x = 0; x < n; x++) {
System.out.print(arr[x] + " ");
}
}
3. INSERTION SORT
public void insertionSort(int n) {
int i, j, newValue;
int[] arr = generateRandom(n);
for (i = 1; i < arr.length; i++) {
newValue = arr[i];
j = i;
while (j > 0 && arr[j - 1] > newValue) {
arr[j] = arr[j - 1];
j--;
}
arr[j] = newValue;
}
for (int x = 0; x < n; x++) {
System.out.print(arr[x] + " ");
}
}
4. SHELL SORT
public void shellSort(int n) {
int[] arr = generateRandom(n);
int increment = arr.length / 2;
while (increment > 0) {
for (int i = increment; i < arr.length; i++) {
int j = i;
int temp = arr[i];
while (j >= increment && arr[j - increment]
> temp) {
arr[j] = arr[j - increment];
j = j - increment;
}
arr[j] = temp;
}
if (increment == 2) {
increment = 1;
} else {
increment *= (5.0 / 11);
}
}
for (int x = 0; x < n; x++) {
System.out.print(arr[x] + " ");
}
}
5. MERGE SORT
public void mergeSort(int n) {
int arr[] = generateRandom(n);
arr = merge(arr);
for (int x = 0; x < n; x++) {
System.out.print(arr[x] + " ");
}
}
}
}
6. QUICK SORT
public void quickSort(int n) {
int[] arr = generateRandom(n);
arr = quick(arr, 0, arr.length - 1);
for (int x = 0; x < n; x++) {
System.out.print(arr[x] + " ");
}
}
while (i <= j) {
while (arr[i] < pivot) {
i++;
}
while (arr[j] > pivot) {
j--;
}
if (i <= j) {
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
i++;
j--;
}
}
return i;
}
private int[] quick(int arr[], int left, int right) {
int index = partition(arr, left, right);
if (left < index - 1) {
quick(arr, left, index - 1);
}
if (index < right) {
quick(arr, index, right);
}
return arr;
}
BAB III
HASIL DAN PEMBAHASAN
Pada kali ini akan digunakan 6 algoritma sorting untuk mengurutkan data secara random.
Adapun macam-macam algoritma tersebut yaitu: bubble sort, selection sort, insertion sort,
shell sort, merge sort, quick sort. Dengan menguji masing-masing algoritma dengan variasi
nilai N =1000, 5000, 10000, 25000, 50000.
Memori: 4 GB
Berikut ini tabel hasil dari running time (ms) masing- masing algoritma sorting:
Pada pengujian kali ini, algoritma sorting yang tercepat di antara 6 algoritma adalah
quick sort. Sedangkan algoritma sorting yang terlambat adalah bubble sort. Pada algoritma
bubble sort, ketika data N yang dimasukkan kecil, selisih running time dengan algoritma
sorting lainnya masih kecil/sedikit. Tetapi ketika data N yang dimasukkan semakin besar,
selisih runing time-nya menjadi semakin besar.
Berdasarkan hasil running time di atas, setiap algoritma sorting memiliki nilai worst
case dan best case yang berbeda-beda. Misalnya:
Insertion sort
Kompleksitas untuk kasus terbaiknya adalah O(N). Pada kasus terbaik ini, elemen-
elemen pada array sudah terurut. Elemen di kiri lebih kecil daripada elemen di kanan.
Keterurutan pada elemen tersebut adalah menaik (ascending).
Kompleksitas untuk kasus terburuk adalah O(N 2 ). Pada kasus terburuk ini
keterurutan awal elemen-elemen pada array adalah menurun (descending).
Kompleksitas untuk kasus rata-rata adalah O(N 2 ). Hal ini terjadi jika array terurut
secara acak.
Insertion sort lebih simpel dan lebih baik digunakan untuk jumlah data yang sangat
kecil. Untuk jumlah data yang besar, insertion sort tidak cocok untuk diterapkan karena
kompleksitas waktu dari algoritma tersebut adalah O(N 2 ).
Merge sort
Quick sort
Kompleksitas untuk kasus terbaik dan kasus rata-rata adalah O(N log N).
Kompleksitas untuk kasus terburuk adalah O(N 2 ).
Pemilihan pivot sangat penting karena bergantung pada pivot kita mendapatkan
kompleksitas waktu kasus terbaik atau terburuk. Jika pivot yang dipilih merupakan
elemen pertama atau terakhir dari array maka kompleksitas waktu yang didapat adalah
O(N 2 ).
BAB IV
KESIMPULAN
Algoritma “quick sort” adalah algoritma paling efektif di antara 6 algoritma sorting yang
diujikan.
Pada kondisi input N = 1000 dan 5000, semua algoritma sorting masih terasa efektif,
tetapi ketika input N-nya semakin besar, algoritma “bubble sort” menjadi kurang efektif
bahkan bisa menjadi tidak efektif.
Kondisi spesifikasi dari hardware dan software komputer juga mempengaruhi running
time algoritma yang dijalankan.