Tugas_for_Aplro_DivideNconquer

#include <cstdlib>
#include <iostream>

using namespace std;

void minmax2(int A[], int i, int j, int &min, int &max ){
     /*
     Mencari nilai maksimum dan minimum di dalam tabel A yang
     berukuran n elemen secara Divide and Conquer.
     Masukan: tabel A yang sudah terdefinisi elemen-elemennya
     Keluaran: nilai maksimum dan nilai minimum tabel
     */
     int min1, min2, max1, max2,k;
     if(i==j){
              min=A[i];
              max=A[i];
              }
     else if(i==j-1){
          if(A[i]<A[j]){
                        max=A[j];
                        min=A[i];
                        }
          else{
               max=A[i];
               min=A[j];
               }
          }
     else{
          k=(i+j)/2;
          minmax2(A,i,k,min1,max1);
          minmax2(A,(k+1),j,min2,max2);
          if(min1<min2)min=min1;
          else min=min2;
          if(max1<max2)max=max2;
          else max=max1;
          }
     }

int main(int argc, char *argv[])
{
    system("color f2");
    system("title MinMax - Selasa, 29 Mei 2012 - dyasprogramming.blogspot.com");
   
    int A[100],n,i,j,min,max;
    cout<<"Mauskkan banyak data : ";
    cin>>n;
    for(int a=1;a<=n;a++){
            cout<<"Data ke-"<<a<<" : "; //Masukan data sebanyak n elemen
            cin>>A[a];
            }
    i=1;
    j=n;
   
    minmax2(A,i,j,min,max);
   
    cout<<"\nNilai max = "<<max<<endl;
    cout<<"Nilai min = "<<min<<endl<<endl;
   
    system("PAUSE");
    return EXIT_SUCCESS;
}


Program divide and Conquer (Merge Sort)
--------------------------------------------------
//Program C++ Merge Sort Devide and Conquer


#include <cstdlib>
#include <iostream>

using namespace std;

void merge(int A[], int kiri, int tengah,int kanan){
/*Menggabung tabel A[kiri..tengah] dan tabel A[tengah+1..kanan]
  menjadi tabel A[kiri..kanan] yang terurut menaik.
  Masukan: A[kiri..tengah] dan tabel A[tengah+1..kanan] yang sudah terurut menaik.
  Keluaran: A[kiri..kanan] yang terurut menaik.
*/
 int B[100];
 int i, kidal1, kidal2;
 kidal1=kiri;//  { A[kiri .. tengah] }
 kidal2=tengah + 1;//   { A[tengah+1 .. kanan] }
 i=kiri;
 while ((kidal1 <= tengah) && (kidal2 <= kanan)){
       if (A[kidal1] <= A[kidal2]){
          B[i]=A[kidal1];
          kidal1=kidal1 + 1;
         }
   else{
            B[i]=A[kidal2];
     kidal2=kidal2 + 1;
        }
   i=i + 1;
    }
 //{ kidal1 > tengah or kidal2 > kanan }
 //{ salin sisa A bagian kiri ke B, jika ada }
 while (kidal1 <= tengah){
       B[i]=A[kidal1];
   kidal1=kidal1 + 1;
   i=i + 1;
    }
   //{ kidal1 > tengah }
   //{ salin sisa A bagian kanan ke B, jika ada }
 while (kidal2 <= kanan){
   B[i]=A[kidal2];
   kidal2=kidal2 + 1;
   i=i + 1;
 }
 //{ kidal2 > kanan }

   //{ salin kembali elemen-elemen tabel B ke A }
 for (i=kiri;i<=kanan;i++){
   A[i]=B[i];
    }  
   //{ diperoleh tabel A yang terurut membesar }

}

void MergeSort(int A[], int i, int j){  
/* Mengurutkan tabel A[i..j] dengan algoritma Merge Sort
  Masukan: Tabel A dengan n elemen
  Keluaran: Tabel A yang terurut
*/
int k;
   if (i < j){//  { Ukuran(A)> 1}
     k=(i+j)/2;
     MergeSort(A, i, k);
     MergeSort(A, k+1, j);
     merge(A, i, k, j);
   }
}

int main(int argc, char *argv[])
{
    system("color f2");
    system("title MergeSort - Selasa, 29 Mei 2012 - dyasprogramming.blogspot.com");
   
    int A[100],n,i,j;
    cout<<"Mauskkan banyak data : ";
    cin>>n;
    for(int a=1;a<=n;a++){
            cout<<"Data ke-"<<a<<" : "; //Masukan data sebanyak n elemen
            cin>>A[a];
            }
    i=1;
    j=n;
   
    MergeSort(A,i,j);
   
    for(int a=1;a<=n;a++){
            cout<<A[a]<<" ";
            }
   
   system("PAUSE");
    return EXIT_SUCCESS;
}

Popular posts from this blog

Introduction to Use Case Diagram - Case study: Facebook

Kenapa tidak berkurban?

Sequential Search