Laporan ini membahas algoritma pengurutan data menggunakan merge sort. Program yang ditulis dapat mengurutkan bilangan acak yang diinputkan pengguna dengan mengaplikasikan metode merge sort dan menampilkan hasilnya. Program kemudian dimodifikasi untuk menampilkan posisi awal masing-masing bilangan sebelum diurutkan.
Lapopran praktikum struktur data pertemuan 3 Merge_Sort
1. Laporan Praktikum Struktur Data
Pertemuan Ke – 3
Merge Sort
1. Pembahasan
#include<iostream>
#include<conio.h>
using namespace std;
int a[50];
void merge(int, int, int);
void merge_sort(int low, int high)
{
int mid;
if (low<high)
{
mid = (low + high) / 2;
merge_sort(low, mid);
merge_sort(mid + 1, high);
merge(low, mid, high);
}
}
void merge(int low, int mid, int high)
{
int h, i, j, b[50], k;
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 < high; k++)
{
b[i] = a[k]; i++;
}
}
for (k = low; k < high; k++)
a[k] = b[k];
}
2. int main(void)
{
int num, i;
cout << "==============================" << endl;
cout << "Merge Sort Program" << endl;
cout << "------------------------------" << endl;
cout << endl << endl;
cout << "Masukan Banyak Bilangan: "; cin >> num;
cout << endl;
cout << "Sekarang Masukan :" << num << "Bilangan yang Ingin di Urutkan:"
<< endl;
for (i = 1; i <= num; i++)
{
cout << "Bilangan ke- :" << i << " = "; cin >> a[i];
}
merge_sort(1, num);
cout << endl;
cout << "Hasil akhir pengurutan :" << endl;
cout << endl;
for (i = 1; i<=num; i++)
cout << a[i] << " - ";
cout << endl << endl << endl << endl;
}
#include<iostream> merupakan file header yang berisi fungsi – fungsi yang disediakan oleh C dan
diletakan di file perpustakaan sehingga dapat sebutkan dengan prosesor directive.
#include<conio.h> fileheader yang berisi fungsi –fungsi yangdisediakan oleh C dan diletakan di file
perpustakaan sehingga dapatsebutkan dengan prosesor directive. Dengan nama extention .h menjunjukan
file header.
using namespace std; membuat semua elemen didalamnamespacestd seperti coutdan endl dapat
langsung diakses
int a[50]; deklarasi variabel interger a bertipe array yg berisi 50.
void merge(int, int, int); deklarasi fungsi merge yang di inputkan ke komputer dengan type
data variabel integer.
void merge_sort(int low, int high); deklarasi funsi merge_sortyangdi inputkan kekomputer
dengan data type integer nama variabel low, dan type data integer nama variabel high.
{ kurung kurawal buka untuk memulai statement
int mid; deklarasi variabel bertype integer dengan nama variabel mid
if (low<high) bentuk operator logika dengan kondisi low lebih kecil dari high
{ kurung kurawal buka untu memulai suatu statement dari operator logika if
mid = (low + high) / 2; statement dimana variabel mid berisi kondisi lowplus high dan dimana
kondisi tersebut dibagi 2.
merge_sort(low, mid); statement dimana variabel merge_sort memiliki sebuah kondisi nilai
variabel low dan mid.
merge_sort(mid + 1, high); statement dimana variabel merge_sortmemiliki kondisi nilai variabel
dimana mid plus 1, dan high.
merge(low, mid, high); statement dimana variabel merge memiliki kondis nilai variabel low,mid,
high.
} kurung kurawal tutup untuk mengakhiri kondisi dari operator logika if.
} kurung kurawal tutup untuk mengakhiri statement.
3. void merge(int low, int mid, int high) dekalarasi fungsi variabel merge dengan nilai type
data integer low, mid, high. Fungsi ini di inputkan ke komputer.
{ kondisi untuk memulai statement pada fungsi void merge
int h, i, j, b[50], k; deklarasi variabel dengan type data integer dengan nama variabel h,i , j,
k dan variabel b adala variabel integer yang memiliki aray dengan value 50.
h = low; statement dimana h berisi variabel low
i = low; statement dimana i berisi variabel low
j = mid + 1; statement dimana j berisi variabel operand mid plus 1
while ((h <= mid) && (j <= high)) operator logika dengan kondisi variabel h lebih kecil atau
sama dengan variabel mid. Dan variabel j lebih kecil atau sama dengan variabel high.
{ memulai statement pada operator logika while
if (a[h] <= a[j]) operator logika if dengan kondisi variabel a dalam aray h lebih kecil atau sama
dengan variabel a dalam aray j
{ memulai statement
b[i] = a[h]; h++; statement dimana variabel b yangberaray i memiliki variabel a beraray h,kemudian
nilai variabel h di tambah 1 nilai variabelnya.
} mengakhiri statement dari operator logika if
else suatu nilai default dari operator logika if dimana jika nilai kondisi tidak sama dengan if maka operator
tersebut akan beralih ke nilai else
{ memulai statement
b[i] = a[j]; j++; statement dimana variabel b berisi aray i memiliki nilai
variabel a dengan array j, kemudian nilai variabel j ditambahkan nilainya.
} menghakhiri statement dari nilai default else
i++; penambahan nilai variabel dari operator logika while dimana nilai variabel i ditambah 1.
} mengakhiri statement dari operator logika while.
if (h > mid)operator logika if dengan kondisi dimanavariabel h lebih besar dari padanilai variabel mid.
{ memulai statement dari operator logika if
for (k = j; k < high; k++) operator logika for dengan kondisi nilai variabel k sama dengan nilai
pada variabel j, kemudian variabel k lebih kecil dari pada nilai pada variabel high, dan nilai variabel k
ditambahkan 1.
{ memulai statement operator logika for
b[i] = a[k]; i++; variabel b memiliki array data i dimana variabel b berisi variabel a yangmemiliki
aray data k, kemudian variabel i ditambah nilai valuenya 1.
} menutup statement dari operator logika for
} menutup statement dari operator logika if
Else kondisi nilai default dari operator if
{ memulai statement kondisi nilai default dari operator if
for (k = h; k < high; k++) operator logika for dengan kondisi variabel k berisi variabel nilai h,
kemudian variabel k memiliki nilai lebih kecil dari nilai variabel high,dan nilai valuevariabel k diatambhkan
nilainya 1.
{ memulai statement dari operator logika for
b[i] = a[k]; i++; statement dimana variabel b berisi data array i memiliki nilai variabel a yangberisi
data array k, kemudian nilai variabel i ditambahkan 1.
} menutup statement dari operator logika for
} menutup statement dari nilai default operator logika for
for (k = low; k < high; k++) operator logika dengan kondisi variabel nilai k memiliki nilai
variabel low,kemudian variabel k lebih kecil dari variabel high, dan variabel k nilai valuenya di tambah 1.
4. a[k] = b[k]; pendefinisian variabel dimana variabel a berisi nilai data aray k yangmemiliki nilai variabel
b berisi nilai data array k
} mengkahiri statement dari fungsi void merge
int main(void)judul fungsi yang memiliki nilai variabel main bertipe integer. Dan kondisi void kondisi
standar suatu fungsi.
{ memulai statement dari fungsi void main
int num, i; deklarasi variabel dengan nama variabel num, i bertype integer.
cout << "==============================" << endl; perintah menampilkan kelayar
monitor dengan format yang tertera pada semicolom.
cout << "Merge Sort Program" << endl; perintah menampilkan kelayara monitoe dengan
perintah pada semicolom yang berisi Merge Sort Program
cout << "------------------------------" << endl; perintah menampilkan kelayar
monitor dengan format yang tertera pada semicolom.
cout << endl << endl; fungsi manipulator untuk menyisipkan karakter new line
cout << "Masukan Banyak Bilangan: "; cin >> num;perintah menampilkan kelayar monitor
diman perintah tersebut memiliki inputan pada cin>> yang mengarah ke variabel num
cout << endl; fungsi manipulasi untuk menyisipkan karakter new line
cout << "Sekarang Masukan :" << num << "Bilangan yang Ingin di Urutkan:"
<< endl; perintah pengeluaran kelayar monitor yang tertera pada semicolom sekarang masukan :
kemudian terdapat pengeluaran nilai variabel yangterdeklarasi di iputan diatasnyaygkemudian ditampilkan
kembali.Kemudian menampilkan pada semicolomkembali pada Bilangan yangingin diurutkan.Yangmeliliki
fungsi karakter new line
for (i = 1; i <= num; i++)operasi logika for dengan kondisi i memiliki nilai 1,kemudian variabel
i kurang atau sama dari variabel num, dan variabel i ditmabahkan nilai valuenya 1.
{ memulai statement operasi logika for
cout << "Bilangan ke- :" << i << " = "; cin >> a[i]; perintah menampilkan kelayar
monitor yangtertera pada tanda semicolom”Bilangan ke-:“kemudian menampilkan variabel i dan ygtertera
pada semicolom “=” yang mana perintah pengeluaran tersebut memiliki inout variabel yang mengarah ke
variabel a berarray i.
} mengakhiri kondisi statement operasi logika for
merge_sort(1, num); identifikasi fungsi merge_sort dengan kondisi variabel 1 dan num.
cout << endl; fungsi karakter new line
cout << "Hasil akhir pengurutan :" << endl; perintah pengeluaran ke layar monitor yg
tertera pada semicolom
cout << endl; fungsi karakter newline
for (i = 1; i<=num; i++) operator logika for dengan kondisi variabel i bernilai 1,variabel i bernilai
kurang dari atau sama dengan variabel num, dan variabel i ditambah 1 nilai valuenya.
cout << a[i] << " - "; perintah pengeluaran menampilkan variabel yangberisi nilai pada variabel
a[i]
cout << endl << endl << endl << endl; fungsi karakter newline
} mengakhiri statement dari fungsi void main
2. Tugas
Memodifikasi Program yg Ada, dengan contoh sbb:
8 = [dari posisi 1 sebelumnya]
8 = [dari posisi 3 sebelumnya]
5. 9 = [dari posisi 4 sebelumnya]
Syntaks:
#include<iostream>
#include<conio.h>
using namespace std;
int a[50];
void merge(int, int, int);
void merge_sort(int low, int high)
{
int mid;
if (low<high)
{
mid = (low + high) / 2;
merge_sort(low, mid);
merge_sort(mid + 1, high);
merge(low, mid, high);
}
}
void merge(int low, int mid, int high)
{
int h, i, j, b[50], k;
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 <= high; k++)
{
b[i] = a[k]; i++;
}
}
for (k = low; k <= high; k++)
a[k] = b[k];
}
int main(void)
{
int num, i;
6. cout << "===============================================" << endl;
cout << "Merge Sort Program" << endl;
cout << "-----------------------------------------------" << endl;
cout << endl;
cout << "Masukan Banyak Bilangan: "; cin >> num;
cout << endl;
cout << "Sekarang Masukan :" << num << " Bilangan yang Ingin di Urutkan:"
<< endl;
for (i = 1; i <= num; i++)
{
cout << "Bilangan ke- :" << i << " = "; cin >> a[i];
}
merge_sort(1, num);
cout << endl;
cout << "Hasil akhir pengurutan :" << endl;
cout << endl;
for (i = 1; i<=num; i++)
cout << a[i] << " - ";
cout << endl << endl << endl;
cout << "================================================"<<endl;
cout << "Hasil pengurutan Dari Modifikasi Program yg Ada: "<<endl;
cout <<endl<<endl;
for (i = 1; i<=num; i++)
cout << a[i]<<" = [Dari Posisi : "<<i<<" Sebelumnya]"<<endl;
cout<<endl<<endl;
cout<<"---------------------------------------------------"<<endl;
cout << "Tekan Sembarang Tombol Untuk Keluar"<<endl;
cout <<"--------------------------------------------------"<<endl;
}
Hasil outputnya:
7. Catatan: untuk penggunaan Editor compiler menggunakan Dev C++ sehingga terjadi sedikit perbedaan pada
sintaks tertentu. Dikarenakan Compiler Borland dengan Editor Notepad ++ sendiri tidak working pada Os win
8.1 64 bit.
#include<iostream> merupakan file header yang berisi fungsi – fungsi yang disediakan oleh C dan
diletakan di file perpustakaan sehingga dapat sebutkan dengan prosesor directive.
#include<conio.h> fileheader yang berisi fungsi –fungsi yangdisediakan oleh C dan diletakan di file
perpustakaan sehingga dapatsebutkan dengan prosesor directive. Dengan nama extention .h menjunjukan
file header.
using namespace std; membuat semua elemen didalamnamespacestd seperti coutdan endl dapat
langsung diakses
int a[50]; deklarasi variabel interger a bertipe array yg berisi 50.
void merge(int, int, int); deklarasi fungsi merge yang di inputkan ke komputer dengan type
data variabel integer.
void merge_sort(int low, int high); deklarasi funsi merge_sortyangdi inputkan kekomputer
dengan data type integer nama variabel low, dan type data integer nama variabel high.
{ kurung kurawal buka untuk memulai statement
int mid; deklarasi variabel bertype integer dengan nama variabel mid
if (low<high) bentuk operator logika dengan kondisi low lebih kecil dari high
{ kurung kurawal buka untu memulai suatu statement dari operator logika if
mid = (low + high) / 2; statement dimana variabel mid berisi kondisi lowplus high dan dimana
kondisi tersebut dibagi 2.
8. merge_sort(low, mid); statement dimana variabel merge_sort memiliki sebuah kondisi nilai
variabel low dan mid.
merge_sort(mid + 1, high); statement dimana variabel merge_sortmemiliki kondisi nilai variabel
dimana mid plus 1, dan high.
merge(low, mid, high); statement dimana variabel merge memiliki kondis nilai variabel low,mid,
high.
} kurung kurawal tutup untuk mengakhiri kondisi dari operator logika if.
} kurung kurawal tutup untuk mengakhiri statement.
void merge(int low, int mid, int high) dekalarasi fungsi variabel merge dengan nilai type
data integer low, mid, high. Fungsi ini di inputkan ke komputer.
{ kondisi untuk memulai statement pada fungsi void merge
int h, i, j, b[50], k; deklarasi variabel dengan type data integer dengan nama variabel h, i , j,
k dan variabel b adala variabel integer yang memiliki aray dengan value 50.
h = low; statement dimana h berisi variabel low
i = low; statement dimana i berisi variabel low
j = mid + 1; statement dimana j berisi variabel operand mid plus 1
while ((h <= mid) && (j <= high)) operator logika dengan kondisi variabel h lebih kecil atau
sama dengan variabel mid. Dan variabel j lebih kecil atau sama dengan variabel high.
{ memulai statement pada operator logika while
if (a[h] <= a[j]) operator logika if dengan kondisi variabel a dalam aray h lebih kecil atau sama
dengan variabel a dalam aray j
{ memulai statement
b[i] = a[h]; h++; statement dimana variabel b yangberaray i memiliki variabel a beraray h,kemudian
nilai variabel h di tambah 1 nilai variabelnya.
} mengakhiri statement dari operator logika if
else suatu nilai default dari operator logika if dimana jika nilai kondisi tidak sama dengan if maka operator
tersebut akan beralih ke nilai else
{ memulai statement
b[i] = a[j]; j++; statement dimana variabel b berisi aray i memiliki nilai
variabel a dengan array j, kemudian nilai variabel j ditambahkan nilainya.
} menghakhiri statement dari nilai default else
i++; penambahan nilai variabel dari operator logika while dimana nilai variabel i ditambah 1.
} mengakhiri statement dari operator logika while.
if (h > mid)operator logika if dengan kondisi dimanavariabel h lebih besar dari padanilai variabel mid.
{ memulai statement dari operator logika if
for (k = j; k < high; k++) operator logika for dengan kondisi nilai variabel k sama dengan nilai
pada variabel j, kemudian variabel k lebih kecil dari pada nilai pada variabel high, dan nilai variabel k
ditambahkan 1.
{ memulai statement operator logika for
b[i] = a[k]; i++; variabel b memiliki array data i dimana variabel b berisi variabel a yangmemiliki
aray data k, kemudian variabel i ditambah nilai valuenya 1.
} menutup statement dari operator logika for
} menutup statement dari operator logika if
Else kondisi nilai default dari operator if
{ memulai statement kondisi nilai default dari operator if
9. for (k = h; k < high; k++) operator logika for dengan kondisi variabel k berisi variabel nilai h,
kemudian variabel k memiliki nilai lebih kecil dari nilai variabel high,dan nilai valuevariabel k diatambhkan
nilainya 1.
{ memulai statement dari operator logika for
b[i] = a[k]; i++; statement dimana variabel b berisi data array i memiliki nilai variabel a yangberisi
data array k, kemudian nilai variabel i ditambahkan 1.
} menutup statement dari operator logika for
} menutup statement dari nilai default operator logika for
for (k = low; k < high; k++) operator logika dengan kondisi variabel nilai k memiliki nilai
variabel low,kemudian variabel k lebih kecil dari variabel high, dan variabel k nilai valuenya di tambah 1.
a[k] = b[k]; pendefinisian variabel dimana variabel a berisi nilai data aray k yangmemiliki nilai variabel
b berisi nilai data array k
} mengkahiri statement dari fungsi void merge
int main(void)judul fungsi yang memiliki nilai variabel main bertipe integer. Dan kondisi void kondisi
standar suatu fungsi.
{ memulai statement dari fungsi void main
int num, i; deklarasi variabel dengan nama variabel num, i bertype integer.
cout << "==============================" << endl; perintah menampilkan kelayar
monitor dengan format yang tertera pada semicolom.
cout << "Merge Sort Program" << endl; perintah menampilkan kelayara monitoe dengan
perintah pada semicolom yang berisi Merge Sort Program
cout << "------------------------------" << endl; perintah menampilkan kelayar
monitor dengan format yang tertera pada semicolom.
cout << endl << endl; fungsi manipulator untuk menyisipkan karakter new line
cout << "Masukan Banyak Bilangan: "; cin >> num;perintah menampilkan kelayar monitor
diman perintah tersebut memiliki inputan pada cin>> yang mengarah ke variabel num
cout << endl; fungsi manipulasi untuk menyisipkan karakter new line
cout << "Sekarang Masukan :" << num << "Bilangan yang Ingin di Urutkan:"
<< endl; perintah pengeluaran kelayar monitor yang tertera pada semicolom sekarang masukan :
kemudian terdapat pengeluaran nilai variabel yangterdeklarasi di iputan diatasnyaygkemudian ditampilkan
kembali.Kemudian menampilkan pada semicolomkembali pada Bilangan yangingin diurutka n.Yangmeliliki
fungsi karakter new line
for (i = 1; i <= num; i++)operasi logika for dengan kondisi i memiliki nilai 1,kemudian variabel
i kurang atau sama dari variabel num, dan variabel i ditmabahkan nilai valuenya 1.
{ memulai statement operasi logika for
cout << "Bilangan ke- :" << i << " = "; cin >> a[i]; perintah menampilkan kelayar
monitor yangtertera pada tanda semicolom”Bilangan ke-:“kemudian menampilkan variabel i dan ygtertera
pada semicolom “=” yang mana perintah pengeluaran tersebut memiliki inout variabel yang mengarah ke
variabel a berarray i.
} mengakhiri kondisi statement operasi logika for
merge_sort(1, num); identifikasi fungsi merge_sort dengan kondisi variabel 1 dan num.
cout << endl; fungsi karakter new line
cout << "Hasil akhir pengurutan :" << endl; perintah pengeluaran ke layar monitor yg
tertera pada semicolom
cout << endl; fungsi karakter newline
10. for (i = 1; i<=num; i++) operator logika for dengan kondisi variabel i bernilai 1,variabel i bernilai
kurang dari atau sama dengan variabel num, dan variabel i ditambah 1 nilai valuenya.
cout << a[i] << " - "; perintah pengeluaran menampilkan variabel yangberisi nilai pada variabel
a[i]
cout << "Hasil pengurutan Dari Modifikasi Program yg Ada: "<<endl; Perintah
pengeluaran kelayar monitor untuk menampilkan text yg terdapat pada semicolom.
cout <<endl<<endl; fungsi karakter newline
for (i = 1; i<=num; i++) operasi logika for dengan kondisi i memiliki nilai 1,kemudian variabel i
kurang atau sama dari variabel num, dan variabel i ditmabahkan nilai valuenya 1.
cout << a[i]<<" = [Dari Posisi : "<<i<<" Sebelumnya]"<<endl; perintah
pengeluaran kelayar monitor dimana variabel a bearai i ditampilkan hasil operasionalnya. Dan begitu juga
variabel i. Yang diikuti tanda semicolom dalam textnya.
cout<<endl<<endl; fungsi karakter newline
cout<<"---------------------------------------------------"<<endl; perintah
pengeluaran kelayar monitor yg berada di tanda semicolom dengan fungsi katakter newline
cout << "Tekan Sembarang Tombol Untuk Keluar"<<endl; perintah pengeluaran
kelayar monitor yg berada di tanda semicolom dengan fungsi katakter newline
cout <<"--------------------------------------------------"<<endl; perintah
pengeluaran kelayar monitor yg berada di tanda semicolom dengan fungsi katakter newline
cout << endl << endl << endl << endl; fungsi karakter newline
} mengakhiri statement dari fungsi void main
Tracking Pada Hasil Listing Praktikum Struktur Data Pertemuan ke 3:
11. 3. Kesimpulan
Dari hasil praktikumStrukturdataPertemuanke –3 tentangMerge Sort di laboratorium
terpadu,makadapat diambil kesimpulansebagai berikut:
DalampenggunaanMerge Sort dikenal denganDivide andConquer.Dividememilah
elemen –elemendari rangkaiandatamenjadi duabagiandalambentukoperasional
yang dilakukanmerge sort.SedangkanConquer adlahmemanggil prosedurmerge
secara secursif.
PenggunaanalgorithmaMerge Sortuntukmengurutkandansertamemahami
karakteristikalgoritmamerge sort.
DalampenggunaanalgoritmaMerge Sortelemenyangdi pilah menjadi duabagian
tersebutdi gabungkankembari denganperbandingandatayangpalingkecil berada
palingdepan.