judul

SELAMAT DATANG DAN SELAMAT MEMBACA BLOG KU :)

Jumat, 28 Maret 2014

5.1 The Two Way Merge

=> algoritmany

if a[m]<b[n] then a[m+1]:=b[n+1]:=a[m];
i:=1;

j:=1;

nm:= n+m;

for k:= 1 to nm dobegin {merge next element }

if a[i]<b[j] thenbeginc[k]:=a[i];

i:=i+1end elsebeginc[k]:=b[j];

j:=j+1end

end

=>program nya :


#include <iostream>

int data[100];


void mergeSort(int awal, int mid, int akhir)
{
cout<<endl;
int temp[100], tempAwal = awal, tempMid = mid, i = 0;
while(tempAwal < mid && tempMid < akhir)
{
if(data[tempAwal] < data[tempMid])
temp[i] = data[tempAwal],tempAwal++;
else
temp[i] = data[tempMid],tempMid++;
i++;
}
while(tempAwal < mid) //kalau masih ada yang sisa
temp[i] = data[tempAwal],tempAwal++,i++;
while(tempMid < akhir)
temp[i] = data[tempMid],tempMid++,i++;
for(int j=0,k=awal;j<i,k<akhir;j++,k++) //mengembalikan ke array semula, tapi
cout<<data[k]<<' '<<temp[j]<<endl, data[k] = temp[j]; //sudah urut
}


void merge(int awal, int akhir) //membagi data secara rekursif
{
if(akhir-awal != 1)
{
int mid = (awal+akhir)/2;
merge(awal, mid);
merge(mid, akhir);
mergeSort(awal, mid, akhir);
}
}


int main()
{
int n;
cout<<"Masukan banya data = ";cin>>n;
cout<<"Masukan data yang akan di susun = ";
for(int i=0;i<n;i++)
cin>>data[i];
merge(0,n);
for(int i=0;i<n;i++)
cout<<data[i]<<' ';
return 0;
}

Tidak ada komentar:

Posting Komentar