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).
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.
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.
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]<<"";
}
}
makasih sudah share
BalasHapusLampu servis hp