#include <cstdlib>
#include <iostream>
using namespace std;
void masuk_data(int A[], int n){
     int i;
     for(i=0;i<n;i++){
        cout<<"Data ke-"<<i+1<<"=";
        cin>>A[i];               
       }
     }
void cetak_data(const int A[], int n){
     int i;
     for(i=0;i<n;i++)
         cout<<A[i]<<" ";
         cout<<endl;               
     }
void merge(int a[100],int kiri,int tengah,int kanan){
     int bagianKiri,posTemp,banyakElemen,i;
     int temp[100];
     bagianKiri=tengah-1;
     posTemp=kiri;
     banyakElemen=kanan-kiri+1;
     while((kiri<=bagianKiri)&&(tengah<=kanan))
     if((a[kiri]<=a[tengah])){
       temp[posTemp]=a[kiri];
       posTemp=posTemp+1;
       kiri=kiri+1;                                  
      }
      else{
       temp[posTemp]=a[tengah];
       posTemp=posTemp+1;
       tengah=tengah+1;          
      }
      while((kiri<=bagianKiri)){
      temp[posTemp]=a[kiri];
      posTemp=posTemp+1;
      kiri=kiri+1;                          
      }
      while((tengah<=kanan)){
      temp[posTemp]=a[tengah];
      posTemp=posTemp+1;
      tengah=tengah+1;                       
      }
      for(i=1;i<=banyakElemen;i++){
       a[kanan]=temp[kanan];
       kanan=kanan-1;                             
      }
     }
void merge_sort(int A[100], int kiri, int kanan){
     int tengah;
     if((kiri<kanan)){
      tengah=(kiri+kanan)/2;
      merge_sort(A,kiri,tengah);
      merge_sort(A,tengah+1,kanan);
      merge(A,kiri,tengah+1,kanan);                 
     }
     }     
int main(int argc, char *argv[])
{   
    int n;
    int data[100];
    cout<<"Berapa data array : ";
    cin>>n;
    masuk_data(data,n);
    cetak_data(data,n);
    merge_sort(data,0,n-1);
    cetak_data(data,n);    
    system("PAUSE");
    return EXIT_SUCCESS;
}
semoga bermanfaat .....

 












0 Komentar Terbaik
Post a Comment