Anda di halaman 1dari 4

2

2013

STRUKTUR DATA

MODUL II
MERGE SORT

I. Pendahuluan
Merge Sort adalah algoritma sorting untuk menggabungkan dua kelompok data
yang

sudah terurut, kemudian digabung dan hasilnya adalah data terurut. Algoritma

merge sort melibatkan tiga Iangkah


1. Bila jumlah item yang di sort adalah 0 atau 1, return
2. Sort secara rekursif bagian pertama dan kedua secara terpisah
3. Gabungkan dua bagian yang sudah terurut tersebut ke dalam sebuah kelompk
tersortir.
Jika kita mempunyai sekelompok data yang tidak terurut, kita dapat mengurutkan dengan
merge sort. Kita coba membuat data Terdapat deretan data dengan susunan sebagai berikut

Data dibagi dua.


Kiri-1

Kanan-2

Bagian kin dibagi menjadi dua lagi, demikian juga bagian kanan.

Kiri-1.2

Kanan

-1.2

Kiri-2.2

Kanan-2.2

Jika sudah memperoleh satu data untuk setiap bagian, kemudian bagian kiri dan
kanan dan masing-masing bagian digabung kembali dengan meletakkannya ke dalam larik
dengan ukuran 2 kali setiap bagian. Pada bagian paling akhir, terdapat masing-masing satu
data, maka kita akan gabungkan dengan menggunakan sebuah tempat yang mempunyai
kapasitas dua data.
Teknik Informatika, Politeknik Gorontalo

2013

STRUKTUR DATA

Cara menggabungkan adalah dengan melihat data mulai dan data pertama untuk
masing-masing bagian, kemudian data dibandingkan. Yang lebih kecil ditempatkan ke
wadah terlebih dalulu.
Kin-i .2

Kanan-1 .2

Misalnya untuk memeriksa data sebelah kin kita gunakan vaniabel I dan kanan R. Karena
data[L] > data[R], maka data[R] ditempatkan terlebih dahulu. Dan karena setelah digeser
tidak ada, maka data pada posisi I langsung ditempatkan pada posisi tersebut.

Demikian juga data pada bagian kanan. Kita perlakukan dengan cara yang sama.

Kini-2.2

Kanan-2.2

Karena data[L] < data[R], maka data[L] ditempatkan terlebih dahulu. Dan karena setelah
digeser tidak ada, maka data pada posisi R Iangsung ditempatkan pada posisi tersebut.

Kita masih mempunyai dua bagian data. Kedua bagian tersebut, kita gabung dengan
menggunakan cara yang sama.
Kiri-1
L

Kanan-1
R

Kita mulai dengan menempatkan variabel L di posisi paling kin dan deretan data
Kin-i dan menempatkan vaniabel R di posisi paling kin dan data Kanan-i. Kita bandingkan

Teknik Informatika, Politeknik Gorontalo

2013

STRUKTUR DATA

kedua data pada posisi I dan R. Ternyata data[L] < data[R], maka data pada posisi L
ditempatkan pada posisi pertama

3
Kemudian kita geser posisi L ke data berikutnya. Posisi L yang digeser karena data
pada posisi tersebutlah yang baru saja dimasukkan ke dalam deretan data hasil
penggabungan. Kemudian kedua data dibandingkan lagi.

Kiri-1

Kanan-1
L

Ternyata data[L] > data[R], maka data pada posisi R ditempatkan pada posisi kedua

Selanjutnya posisi R digeser ke data berikutnya, kemudian dibandingkan lagi.


Kiri-1

Kanan-1
L

Ternyata data[L] > data[R], maka data pada posisi R ditempatkan pada posisi kedua

Posisi R sudah berada pada posisi terakhir, maka tidak bisa digeser lagi, sehingga posisi L
Langsung kita tempatkan pada posisi berikutnya.

Teknik Informatika, Politeknik Gorontalo

2013

STRUKTUR DATA

II. Latihan
Buatlah Algoritma Merge Sort untuk mengurutkan data seperti berikut :

12 , 9 , 4, 99 , 120 , 1 , 3 , 10

III. Contoh Program


public class MergeSort {
public static void main(String[] args)
{
int i;
int array[] = {12,9,4,99,120,1,3,10};
System.out.println("\n\n Merge Sort\n");
System.out.println("Data sebelum diurutkan:\n");
for(i = 0; i < array.length; i++)
System.out.print( array[i]+" ");
System.out.println();
mergeSort_srt(array,0, array.length-1);
System.out.print("Data Setelah diurutkan:\n");
for(i = 0; i <array.length; i++)
System.out.print(array[i]+" ");
System.out.println();
}
public static void mergeSort_srt(int array[],int lo, int n){
int low = lo;
int high = n;
if (low >= high) {
return;
}
int middle = (low + high) / 2;
mergeSort_srt(array, low, middle);
mergeSort_srt(array, middle + 1, high);
int end_low = middle;
int start_high = middle + 1;
while ((lo <= end_low) && (start_high <= high)) {
if (array[low] < array[start_high]) {
low++;
} else {
int Temp = array[start_high];
for (int k = start_high- 1; k >= low; k--) {
array[k+1] = array[k];
}
array[low] = Temp;
low++;
end_low++;
start_high++;
}
}
}
}

Teknik Informatika, Politeknik Gorontalo

Anda mungkin juga menyukai