Anda di halaman 1dari 9

MAKALAH

Analisis Algoritma tentang


MERGE SORT

Oleh :
Radivka Angga P 18201146
Aditya Satria M 18201005/P
Yuda Ilhami 18201300

SEKOLAH TINGGI MANAJEMEN INFORMATIKA


DAN KOMPUTER ASIA MALANG
PROGRAM STUDI TEKNIK INFORMATIKA
2018
DEFINISI MERGE SORT
Merge sort adalah sort yang dilakukan dengan teknik merge
(menggabungkan) dua buah array kedalam sebuah array yang baru. Algoritma
merge sort membagi tabel menjadi dua tabel yang sama besar. Masing-masing
tabel diurutkan secara rekursif, dan kemudian digabungkan kembali untuk
membentuk tabel yang terurut. Implementasi dasar dari algoritma merge sort
memakai tiga buah tabel, dua untuk menyimpan elemen dari tabel yang telah di
bagi dua dan satu untuk menyimpan elemen yang telah terurut. Namun algoritma
ini dapat juga dilakukan langsung pada dua tabel, sehingga menghemat ruang atau
memori yang dibutuhkan.
Algoritma Merge umumnya memiliki satu set pointer p0..n yang menunjuk
suatu posisi di dalam satu set daftar L0..n . Pada awalnya mereka menunjuk item
yang pertama pada setiap daftar. Algoritmanya sebagai berikut:
Selama p0..n masih menunjuk data yang di dalam sebagai pengganti pada
akhirnya:
1. Melakukan sesuatu dengan data item yang menunjuk daftar mereka
masing-masing.
2. Menemukan pointers points untuk item dengan kunci yang paling rendah;
membantu salah satu pointer untuk item yang berikutnya dalam daftar

Pada umumnya algoritma merge berjalan dalam waktu proposional untuk


penjumlahan pada panjangnya daftar. Algoritma merge beroperasi pada bilangan
besar dalam daftar yang akan segera mengalikan penjumlahan panjangnya daftar
pada saat itu untuk keluaran gambar pointers points yang mana menunjuk pada
item yang paling rendah, yang dapat terpengaruhi dengan suatu heap (tumpukan)
yang didasarkan prioritas antrian dalam O (log n) waktu, untuk O (m log n) waktu
(dimana n adalah bilangan pada daftar yang digabungkan, m adalah penjumlahan
panjangnya daftar, dan lg adalah log basis 2). Ketika menggabungkan panjang m
dua daftar, terdapat suatu perbandingan lompatan yang lebih rendah 2m-1 yang
ada dalam kasus terburuk.
Keluaran data item Merge klasik (satu yang digunakan dalam merge sort)
dengan kunci yang paling rendah pada langkah masing-masing, memberikan
beberapa daftar yang diurutkan, hasil daftar yang diurutkan berisi semua unsur-
unsur di dalam daftar input manapun, dan hal itu dilakukan agar waktunya
proporsioal untuk input penjumlahan panjangnya daftar.

Penggabungan dapat juga digunakan untuk berbagai hal:


Diberikan satu set saldo-saldo rekening yang beredar dan satu set
transaksi, kedua-duanya disortir oleh nomor rekening, menghasilkan satu saldo-
saldo rekening baru setelah transaksi diterapkan; ini selalu diperlukan untuk
mempercepat ”transaksi baru” penunjuk ketika keduanya mempunyai kunci yang
sama, dan menambahkan semua angka-angka pada tape yang manapun dengan
nomor rekening yang sama untuk menghasilkan saldo yang baru.
Menghasilkan suatu daftar catatan yang disortir dengan menyajikan kunci
disemua daftar ini yang memerlukan outputting kapan saja suatu catatan yang
semua kunci p0..n adalah sama.
Dengan cara yang sama untuk menemukan bilangan besar pada satu tape
yang lebih kecil dibandingkan masing-masing nomor pada satu tape yang lainnya
(contoh untuk mengeluarkan gambar pengelompokan pajak masing-masing orang
di dalamnya).
Dengan cara yang sama untuk menghitung perbedaan set semua arsip
dalam satu daftar dengan arsip yang tidak sesuaian dengan yang lainnya.
Operasi penyisipan dalam mesin pencarian untuk menghasilkan suatu
indeks balikkan.
Menggabungkan permainan-permainan adalah suatu peranan pusat dalam
fungsi pemrograman teknik Dijkstra untuk menghasilkan bilangan-bilangan tetap.

Algoritma
Prinsip mendasar yang di gunakan pada algoritma merge sort sering
disebut atau mengikuti pola pecah belah dan taklukan (divide and conquer).
Pola divide and Conquer, adalah banyak diadopsi oleh beberapa alogirtma
yang pada dasarnya mengimplementasikan konsep rekursi (adalah cara untuk
menetapkan proses dengan dirinya sendiri) untuk memecahkan permasalahan.
Caranya adalah permasalahan utama dipecah menjadi sub-masalah, kemudian
solusi dari sub masalah akan di gabungkan untuk mendapatkan solusi dari
masalah utama.

Pada setiap tingkat rekursi pola tersebut terdiri atas 3 langkah :


1. Devide, yakni memilih masalah menjadi sub-masalah.
2. Conquer, yakni menyelesaikan sub-masalah tersebut secara rekursi.
3. Kombinasi/Penggabungan, menggabungkan solusi dari sub-masalah untuk
mendapatkan solusi dari masalah utama.
Cara kerja algoritma ini sangat mudah, yakni membagi baris (larik)data
menjadi dua bagian yang lebih kecil. Kedua baris (larik) tersebut kemudian akan
diurutkan secara terpisah, setelah kedua baris (larik) tersebut terurut, maka akan
terbentuk baris (larik) baru dari hasil penggabungan baris (larik) yang sudah di
urutkan tersebut.

CONTOH SOURCE CODE DENGAN C++:


#include<iostream.h>
#include<conio.h>

void mergesort(int*,int,int); //Int yang digunakan banyak


void merge(int*,int,int,int);//
int a[20],i,n,b[20];//ketetapan int a<=20 dan b <=20

void main()
{
cout<<"\n masukkan angka :"; //tampilkan angka yang diinginkan
cin>> n;
cout<<" angka :\n ";//tampilkan angkanya
for(i=0;i<n;i++)
cin>> a[i];

mergesort(a,0,n-1);
cout<<" \n data setelah di urutkan :";//data setelah diurutkan
for(i= 0; i<n ;i++)
cout<< a[i]<<" ";
getch();
}

void mergesort(int a[],int i,int j)


{
int mid;
if(i<j)
{

mid=(i+j)/2;//membagi 2 bilangannya
mergesort(a,i,mid);
mergesort(a,mid+1,j);
merge(a,i,mid,j);
}
}
void merge(int a[],int low,int mid ,int high)
{
int h,i,j,k;
h=low;
i=low;
j=mid+1;
while(h<=mid && j<=high)
{
if(a[h]<=a[j])
b[i]=a[h++];
else
b[i]=a[j++];
i++;
}
if( h > mid)
for(k=j;k<=high;k++)
b[i++]=a[k];
else
for(k=h;k<=mid;k++)
b[i++]=a[k];
cout<<"\t";
for(k=low;k<=high;k++)//membandingkanj urutan dari yang rendah ke besar
{ a[k]=b[k];
cout<< a[k]<<"";
}
}

CONTOH STUDI KASUS

FLOWCHART

Anda mungkin juga menyukai