Cool Cigar Smoking With Shades On Monkey

Selasa, 28 Februari 2012

Merge Sort

0comments

Algoritma Merge Sort

Algoritma Merge adalah algoritma yang dijalankan sebagai akibat dari terlalu banyaknya daftar yang diurutkan, dengan menghasilkan lebih banyak daftar yang diurutkan sebagai output. Algoritma merge ini disesuaikan untuk mesin drive tape. Penggunaannya dalam akses memori acak besar yang terkait telah menurun, karena banyak aplikasi algoritma merge yang mempunyai alternatif lebih cepat ketika kamu memiliki akses memori acak yang menjaga semua data mu. Hal ini disebabkan algoritma ini membutuhkan setidaknya ruang atau memori dua kali lebih besar karena dilakukan secara rekursif dan memakai dua tabel.

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 dirumuskan dalam 3 langkah berpola divide-and-conquer. Berikut menjelaskan langkah kerja dari Merge sort.
1. Divide
    Memilah elemen – elemen dari rangkaian data menjadi dua bagian.
2. Conquer
    Conquer setiap bagian dengan memanggil prosedur merge sort secara rekursif
3. Kombinasi
    Mengkombinasikan dua bagian tersebut secara rekursif untuk mendapatkan rangkaian data
    berurutan

Proses rekursi berhenti jika mencapai elemen dasar. Hal ini terjadi bilamana bagian yang akan diurutkan menyisakan tepat satu elemen. Sisa pengurutan satu elemen tersebut menandakan bahwa bagian tersebut telah terurut sesuai rangkaian.

Misalkan kita mau mengurutkan beberapa angka yaitu 38,27,43,3,9,82 dan 10. Maka untuk mengurutkan menggunakan merge-sort langkah-langkahnya seperti gambar dibawah ini 




Algoritma untuk prosedur MergeSortnya :
mergesort(low, high)

 {

      int mid;

      if(low<high)

      {

        mid=(low+high)/2;

        mergesort(low,mid);

        mergesort(mid+1,high);

        merge(low,high,mid);

      }

)

Merge( low,  mid, high)

{

 int h,i,j,k,b[50];

 h=low;

 i=low;

 j=mid+1;

 while((h<=mid)&&(j<=high))

 {

   if(A[h]<A[j])

   {

     b[i]=A[h];

     h++;

   }else{

     b[i]=A[j];

     j++;

   }

     i++;

 }

 if(h>mid)

 {

    for(k=j;k<=high;k++)

    {

      b[i]=A[k];

      i++;

    }

 }

 else

 {

    for(k=h;k<=mid;k++)

    {

     b[i]=A[k];

     i++;

     }

 }

 for(k=low;k<=high;k++)

 {

    A[k]=b[k];

 }

 } 
  






Coding with c++ :
#include <iostream>

using namespace std;

void MergeSort(int low, int high);

void Merge(int , int , int );

int A[50];

int main()

{

 int i, elemen;

 cout<<"Berapa banyak elemen yang ingin disusun ? "; cin>>elemen;

 cout<<endl;

 cout<<"Masukkan " <<elemen<<" elemen: \n";cout<<endl;

 for(i=1;i<=elemen;i++)

 {

   cout << "Elemen ke-"<<i<<" = ";

   cin>>A[i];

 }

 cout<<endl;

 MergeSort(1,elemen);

 cout<<endl;

 cout<<"Setelah di mergesort: \n\n";

 for(i=1;i<=elemen;i++)

 {

    cout<< A[i] <<" ";

 }

 cout<< endl << endl;

 return 0;

}

//prosedure Mergesort

void MergeSort(int low, int high)

{

 int mid;

 if(low<high)

 {

    mid = (low+high)/2;

    MergeSort(low,mid);

    MergeSort(mid+1, high);

    Merge(low, mid, high);

 }

}

//Prosedure Merge

void Merge(int low, int mid, int high)

{

 int h,i,j,k,b[50];

 h=low;

 i=low;

 j=mid+1;

 while((h<=mid)&&(j<=high))

 {

    if(A[h]<A[j])

    {

       b[i]=A[h];

       h++;

    }else{

       b[i]=A[j];

       j++;

    }

   i++;

 }

 if(h>mid)

 {

    for(k=j;k<=high;k++)

    {

      b[i]=A[k];

      i++;

    }

 }else{

    for(k=h;k<=mid;k++)

    {

      b[i]=A[k];

      i++;

    }

 }

 for(k=low;k<=high;k++)

 {

    A[k]=b[k];

 }

}


Output:





lintasberita
 

bip | never go back with my words Blogger Templates Designed by productive dreams | Free Wordpress Templates. presents HD TV Watch Futurama Online. Featured on Singapore Wedding Cakes. © 2011