Anda di halaman 1dari 7

TUGAS STRUKTUR DATA II

MATERI: MERGE SORTING & QUICK SORTING

MATA KULIAH: STRUKTUR DATA II

NAMA : NUGRAHA SUGIANA RIDWAN


NPM : 18.14.3.0001
KELAS : IF–B
SEMESTER : V

PRODI TEKNIK INFORMATIKA


FAKULTAS TEKNIK UNIVERSITAS MAJALENGKA

2019
MERGE SORTING & QUICK SORTING

SOURCE CODE (C++):

(Menggunakan Metode Switch Case)

#include <iostream>
using namespace std;
#define max 100

void tampil(int data[], int n){


for(int i=0;i<n;i++){
cout<< data[i] << ", ";
}
cout<<"..."<<endl;

void Merge(int *a, int low, int high, int pivot) {

// Data yang sudah di-sorting dan akan di-merge (gabung)


int i, j, k, temp[high-low+1];
i = low;
k = 0;
j = pivot + 1;

// Menyimpan data di temp


while (i <= pivot && j <= high) {
if (a[i] < a[j]) {
temp[k] = a[i];
k++;
i++;
}
else {
temp[k] = a[j];
k++;
j++;
}
}

// Memasukkan Data array (i) atau data sebelah Kiri ke temp


while (i <= pivot) {

Page | 1
temp[k] = a[i];
k++;
i++;
}

// Memasukkan Data array (j) atau data sebelah Kanan ke temp


while (j <= high) {
temp[k] = a[j];
k++;
j++;
}

// Memasukkan data di tempke array sementara (a)


for (i = low; i <= high; i++) {
a[i] = temp[i-low];
}
}

/* Fungsi untuk memisah data menjadi dua bagian, atas (high)/


Kanan dan bawah (low) / Kiri */
void MergeSort(int *a, int low, int high) {
int pivot;
if (low < high) {
pivot=(low+high)/2;

// Membagi data menjadi dua bagian


MergeSort(a, low, pivot); // Data Kiri (bawah)
MergeSort(a, pivot+1, high); // Data Kanan (atas)

// Menyatukan Array kembali menjadi satu bagian utuh


Merge(a, low, high, pivot);
}
}

void quick_sort(int data[], int low, int high) {


int i = low, j = high; //Posisi data Awal Sorting
int temp;
int pivot = data[(low+high)/2]; //Pembagi antara Kiri (Left) dan Kanan (Right)

//PROSES Pertukaran/ SWAP//

while (i < j){ //Jika nilai di Kiri (Posisi i) LEBIH KECIL dari nilai di Kanan

Page | 2
while (data[i] < pivot) { //Data di Kiri(i) Lebih Kecil dari Titik Pembagi (Pivot)
i++; // Tak ada pertukaran Data. Posisi (i) bergeser 1 kali ke arah kanan.
}

while (data[j] > pivot) { //Sama seperti nilai Kiri, jika nilai di Kanan Lebih Besar dari Pivot
j--; // Tak ada pertukaran. Posisi (j) bergeser ke Kanan 1 kali
}

if (i <= j) { /*Jika nilai di posisi (i) lebih kecil atau sama dengan (j),
maka dilakukan Pertukaran Posisi(SWAP) */
temp = data[i];
data[i] = data[j];
data[j] = temp;

i++; //Nilai i bertambah 1, geser ke kanan


j--; //Nilai j berkurang 1, geser ke kiri
}
}

//Pengecekan Data setelah Proses Pertukaran


if (low < j) { //Jika nilai di Kiri lebih kecil dari nilai j di posisi yang Baru (setelah bergeser)
quick_sort(data, low, j); // Lakukan SWAP dari posisi kiri den nilai j yang baru
}

if (i < high) { /* Sama seperti nilai di Kiri, jika Nilai di Kanan lebih kecil
dari nilai (i) yang telah bergeser */
quick_sort(data, i, high); // Lakukan SWAP
}
}

int gabung() {
int n, i, data[max];

cout << "Masukkan jumlah data: ";


cin >> n;
cout << endl;

for(i = 0; i < n; i++) {


cout << "Masukkan nilai ke-"<<i+1<<": ";
cin >> data[i];
}
cout << endl;

Page | 3
cout << "Data sebelum diurutkan: "<< endl;
for(i=0;i<n;i++) {
cout << data[i]<<" ";
}
cout << endl;

MergeSort(data, 0, n-1);

cout << endl;


cout << "Hasil pengurutan: " << endl;

tampil(data, n);

cout << endl << endl << endl << endl << endl;
}

int quick() {
int n, i, data[max];

cout << "Masukkan jumlah data: ";


cin >> n;
cout << endl;

for(i = 0; i < n; i++) {


cout << "Masukkan nilai ke-"<<i+1<<": ";
cin >> data[i];
}
cout << endl;

cout << "Data sebelum diurutkan: "<< endl;


for(i=0;i<n;i++) {
cout << data[i]<<" ";
}
cout << endl;

quick_sort(data,0,n-1);//hasil pengurutan

cout << endl;


cout << "Hasil pengurutan: " << endl;

tampil(data, n);

cout << endl << endl << endl << endl << endl;

Page | 4
}

int main() {
int pilihan;

ulangi:

cout << "Program Sorting Sederhana" << endl;


cout << "=========================" << endl;
cout << "1. Merge Sort" << endl;
cout << "2. Quick Sort" << endl;
cout << "3. Keluar" << endl;
cout << "=========================" << endl;
cout << endl;

cout << "Masukkan Pilihan Anda: ";


cin >> pilihan;
cout << endl;

switch(pilihan) {
case 1:
gabung();
goto ulangi;
case 2:
quick();
goto ulangi;
case 3:
cout << "Exit..." << endl;
cout << endl;
break;
default:
cout << "Pilihan tidak ada dalam Menu!" << endl;
break;
}

return 0;
}

Page | 5
SCREENSHOT:

Pilihan 1: Merge Sorting

Pilihan 2: Quick Sorting

Page | 6

Anda mungkin juga menyukai