Anda di halaman 1dari 35

NAMA : MARDIAN

NIM : 232110076

KELAS : D SORE SEMESTER 4

MAKUL : STRUKTUR DATA

DOSEN PENGAMPU : RATIH WIDYA NURCAHYO,S.KOM.,MPd

LAPORAN PRAKTIKUM 8

A. Pendahuluan

Quick Sort adalah salah satu algoritma pengurutan data yang paling cepat, yaitu dengan
membagi list menggunakan sebuah pivot. Quick Sort juga menggunakan rekursif dalam
algoritmanya. Data yang kurang dari pivot sudah ditentukan ditaruh disebelah kirinya pivot
sedangkan data yang lebih besar dari pivot maka ditaruh disebelah kanan pivot.

Contoh Pengurutan Quick Short


dalam hal ini saya punya angka sebagai berikut. 

langkah pertama adalah tentukan pivotnya. dalam hal ini adalah saya memilih angka 7

kemudian buat partisi buat masing2 angka sebelah kanan dan kiri

Merge sort merupakan algoritma pengurutan dalam ilmu komputer yang dirancang untuk
memenuhi kebutuhan pengurutan atas suatu rangkaian data yang tidak memungkinkan untuk
ditampung dalam memori komputer karena jumlahnya yang terlalu besar. 
Contoh Penerapan Merge Sort.

Data sumber yang akan diurutkan adalah sebagai berikut:

langkah pertama kita bagi menjadi 3 bagian susunan elemen data yaitu 4 dengan 7, 1 dengan 2
dan 9 dengan 5.

kemudian kita bandingan elemen pertama yaitu 4 dan 7. karena 4 sudah lebih kecil dari 7
maka posisi tetap.

kemudian bandingkan elemen data ke 2 yaitu angka 1 dan 2. karena angka 1 lebih kecil dari 2
maka posisi tetap.

kemudian bandingkan elemen data ke 3 yaitu angka 9 dan 5. karena angka 5 lebih kecil dari 9
maka posisi 9 ditukar dengan angka 5.
langkah selanjutnya adalah kita bandingkan angka pertama pada elemen pertama dengan
elemen 2 dan elemen 3 pertama kita bandingkan angka 4 dengan element 2 yaitu 1.

cek angka 4 dan 1. lebh besar mana angka 4 dibandingkan dengan angka 1. karena angka 1
lebih kecil dari angka 4 maka angka 1 akan menempati posisi baru di elemen pertama.

B. Tujuan Pokok Praktikum

1. Mahasiswa dapat mengaplikasikan penggunaan quick sort menggunakan array

2. Mahasiswa dapat mempraktikkan penggunan quick sort menggunakan array

3. Mahasiswa dapat mengaplikasikan penggunaan merge sort menggunakan array

4. Mahasiswa dapat mempraktikkan penggunan merge sort menggunakan array

5. Mahasiswa dapat membedakan quick sort dan merge sort pada c++

6. Mahasiswa dapat memahami manfaat penggunaan quick sort dan merge sort
C.Kegiatan Pokok Praktikum

No Pelaksanaan Kegiatan Pelaksanaan TTD

Mahasiswa Pengampu/Asisten

1. Membuat aplikasi urutan


menggunakan quick sort

2. Membuat aplikasi urutan


menggunakan merge sort

3. Membuat aplikasi urutan


menggunakan quick sort dengan pivot
di akhir

4. Membuat aplikasi pengurutan data


mahasiswa menggunakan quick sort
dan merge sort

D. Uraian Pelaksanaan

-Buka aplikasi C++

1.Program pengurutan menggunakan quick sort

-Masukan codingan untuk membuat program pengurutan menggunakan quick sort

#include <iostream.h>

#include <conio.h>

#include <stdio.h>
#include <algorithm>

//deklarasikan array

int arr[99];

int partition(int arr[], int awal, int akhir){

//fungsi mempartisi/membagi array menjadi dua

//deklarasikan pivot dan gunakan elemen array pertama

int pivot = arr[awal];

//deklarasikan count untuk menghitung banyak nilai > dari pivot

int count = 0;

for (int i = awal + 1; i <= akhir; i++) {

if (arr[i] <= pivot)

count++;

//deklarasikan index dari pivot


int pivotIndex = awal + count;

//tukar posisi pivot dengan count

std::swap(arr[pivotIndex], arr[awal]);

int i = awal, j = akhir;

while (i < pivotIndex && j > pivotIndex) {

while (arr[i] <= pivot) {

i++;

while (arr[j] > pivot) {

j--;

if (i < pivotIndex && j > pivotIndex) {

std::swap(arr[i++], arr[j--]);

}
//kembalikan nilai index pivot

return pivotIndex;

quickSort(int arr[], int awal, int akhir){

//fungsi rekursif untuk memanggil quickSort dan partisi

if (awal < akhir){

int p = partition(arr, awal, akhir);

quickSort(arr, awal, p - 1);

quickSort(arr, p + 1, akhir);

tampil(int n){

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

cout << arr[i] << " ";

getch();
}

int tambah(int a, int b){

int n;

n = a+1;

arr[n] = b;

return n;

judul(){

cout<<"=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-="<<endl;

cout<<"Program Mengurutkan Data Menggunakan Quick Sort"<<endl;

cout<<"=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-="<<endl;

menu(){

cout<<"1. Menambahkan Data"<<endl;

cout<<"2. Urutkan Data"<<endl;

cout<<"3. Keluar"<<endl<<endl;

cout<<"Masukkan Pilihan Anda : ";


}

main()

int n,pil,nilai;

n = -1;

do{

clrscr();

judul();

menu();

cin>>pil;

switch (pil) {

case 1:

cout<<"Masukkan data : ";

cin>>nilai;

n = tambah(n,nilai);

break;

case 2:

quickSort(arr, 0, n);
tampil(n);

break;

case 3:

cout<<"Anda Akan Keluar Dari Program"<<endl;

break;

default:

cout<<"Maaf, Anda salah memasukkan pilihan"<<endl;

} while(pil!=3);

}
- fungsi mempartisi/membagi array menjadi dua (int partition(int arr[], int awal, int akhir){),
lalu deklarasikan pivot dan gunakan elemen array pertama (int pivot = arr[awal];),
deklarasikan count untuk menghitung banyak nilai > dari pivot.

- lakukan pengulangan dari awal + 1 hingga akhir, jika nilai > pivot maka count bertambah 1

for (int i = awal + 1; i <= akhir; i++) {

if (arr[i] <= pivot)


count++ }

-Kemudian deklarasikan index dari pivot (int pivotIndex = awal + count;), lalu tukar posisi
pivot dengan count.
-Deklarasikan i dan j untuk mengambil data awal dan akhir tanpa mengubah nilai awal dan
akhir :
int i = awal, j = akhir;
-Lakukan pengulangan apabila nilai i < index pivot dan nilai j > index pivot, lakukan
pengulangan apabila nilai array ke i <= pivot tambankan nilai i dengan 1, lakukan
pengulangan apabila nilai array ke j > pivot lalu kurangi nilai j dengan 1, jika nilai i < index
pivot dan nilai j > index pivot tukar posisi array ke i+1 dengan array j-1.
- Fungsi rekursif untuk memanggil quickSort dan partisi :
quickSort(int arr[], int awal, int akhir){
lakukan rekursif apabila nilai awal < akhir, panggil fungsi partisi, panggil quicksort untuk
bagian kiri, panggil quicksort untuk bagian kanan.
-Setelah itu klik menu Run

-Maka hasil outputnya


2.Program pengurutan menggunakan merge sort

-Masukan codingan untuk membuat program pengurutan menggunakan merge sort

#include <iostream.h>

#include <stdio.h>

#include <conio.h>

merge(int arr[], int kiri, int tengah, int kanan){

//fungsi merge untuk memindah array asli ke array sementara

//bagian untuk menentukan banyak array sebelah kiri dan kanan

int jmlKanan = kanan - tengah;

int jmlKiri = tengah - kiri + 1;

int *arrKiri = new int[jmlKiri],


*arrKanan = new int[jmlKanan];

for (int i = 0; i<jmlKiri; i++){

arrKiri[i] = arr[kiri + i];

for (int j = 0; j<jmlKanan; j++){

arrKanan[j] = arr[tengah + 1 + j];

//deklarasikan index dari masing2 array sementara

int indexKiri = 0, indexKanan = 0, indexGabung = kiri;

while (indexKiri < jmlKiri && indexKanan < jmlKanan){

if (arrKiri[indexKiri] <= arrKanan[indexKanan]){

arr[indexGabung] = arrKiri[indexKiri];

indexKiri++;

} else {

arr[indexGabung] = arrKanan[indexKanan];

indexKanan++;

}
indexGabung++;

while (indexKiri < jmlKiri){

arr[indexGabung] = arrKiri[indexKiri];

indexKiri++;

indexGabung++;

while (indexKanan < jmlKanan){

arr[indexGabung] = arrKanan[indexKanan];

indexKanan++;

indexGabung++;

mergeSort(int arr[], int kiri, int kanan) {

//fungsi rekursif untuk mengurutkan dengan merge

//deklarasikan posisi tengah

int tengah;
if (kiri < kanan){

tengah = kiri + (kanan - kiri) / 2;

mergeSort(arr, kiri, tengah);

mergeSort(arr, tengah + 1, kanan);

merge(arr, kiri, tengah, kanan);

tampil(int arr[], int n){

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

cout << arr[i] << " ";

getch();

int tambah(int arr[], int a, int b){


int n;

n = a+1;

arr[n] = b;

return n;

judul(){

cout<<"=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-="<<endl;

cout<<"Program Mengurutkan Data Menggunakan Merge Sort"<<endl;

cout<<"=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-="<<endl;

menu(){

cout<<"1. Menambahkan Data"<<endl;

cout<<"2. Urutkan Data"<<endl;

cout<<"3. Keluar"<<endl<<endl;

cout<<"Masukkan Pilihan Anda : ";

main()

{
int n,pil,nilai,arr[99];

n = -1;

do{

clrscr();

judul();

menu();

cin>>pil;

switch (pil) {

case 1:

cout<<"Masukkan data : ";

cin>>nilai;

n = tambah(arr,n,nilai);

break;

case 2:

mergeSort(arr, 0, n);

tampil(arr, n);

break;

case 3:

cout<<"Anda Akan Keluar Dari Program"<<endl;

break;
default:

cout<<"Maaf, Anda salah memasukkan pilihan"<<endl;

} while(pil!=3);

}
- fungsi merge untuk memindah array asli ke array sementara, mengurutkan array sementara
dan kembalikan ke array asli :

merge(int arr[], int kiri, int tengah, int kanan){

- Bagian untuk menentukan banyak array sebelah kiri dan kanan

int jmlKanan = kanan - tengah;

int jmlKiri = tengah - kiri + 1;

-Deklarasikan array sebanyakan jumlah kanan dan kiri untuk, menampung data sementara

int *arrKiri = new int[jmlKiri],

*arrKanan = new int[jmlKanan];

-Kemudian lakukan pengulangan dan simpan data dari array utama ke array kanan dan kiri

for (int i = 0; i<jmlKiri; i++){

arrKiri[i] = arr[kiri + i];

}
for (int j = 0; j<jmlKanan; j++){

arrKanan[j] = arr[tengah + 1 + j];

-Deklarasikan index dari masing2 array sementara (int indexKiri = 0, indexKanan = 0,


indexGabung = kiri;)

-Pindahkan data dari array sementara ke array asal dengan melakukan pengulangan apabila
index array sebelah kiri < banyak data sebelah kiri dan index sebelah kanan < banyak data
sebelah kanan, jika nilai array sebelah kiri <= index sebelah kanan, maka nilai pada array
asal adalah nilai array sebelah kiri dan tambahkan index kiri dengan 1 selain itu nilai pada
array asal adalah nilai array sebelah kanan dan tambahkan index kanan dengan 1 tambahkan
index gabungan.

-Apabila masih ada data pada array sementara pindahkan ke array asal dengan melakukan
pengulangan dari index array kiri < banyak data kiri pindahkan data dari array kiri ke array
asal tambahkan data pada index kiri dan gabungan dengan 1 lakukan hal yang sama untuk
array sebelah kanan.

- Kondisi rekursif jika nilai sebelah kiri < kanan tentukan posisi tengah = kiri + kanan - kiri /2

panggil mergeSort untuk array kiri panggil mergeSort untuk bagian kanan panggil fungsi
merge untuk menggabungkan dan mengurutkan.

if (kiri < kanan){

tengah = kiri + (kanan - kiri) / 2;

mergeSort(arr, kiri, tengah);

mergeSort(arr, tengah + 1, kanan);

merge(arr, kiri, tengah, kanan); }

-Setelah itu klik menu Run


- Maka hasil outputnya
-Latihan

-Masukan codingan

#include <iostream.h>

#include <conio.h>

#include <stdio.h>

#include <iomanip.h>
struct mahasiswa{

char nama[30];

int nim, umur;

double ipk;

float nilai;

};

int f = -1, r = -1, n = 5;

judul(){

cout<<"=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-"<<endl;

cout<<"Program Data Mahasiswa "<<endl;

cout<<"Programa Studi Pendidikan Teknologi Informasi "<<endl;

cout<<"=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-"<<endl;

tutup() {

cout<<"-----------------------------------------------------"<<endl;

head(){

tutup();
cout<<setiosflags(ios::left)<<"|"<<setw(4)<<" No"<<"|"<<setw(10)<<" NIM
"<<"|"<<setw(20)<<" Nama "<<"|"<<setw(7)<<"Umur
"<<"|"<<setw(6)<<"IPK"<<setw(5)<<"|"<<endl;

tutup();

menu(){

cout<<"1. Tambahkan Data"<<endl;

cout<<"2. Urutkan Berdasarkan NIM "<<endl;

cout<<"3. Urutkan Berdasarkan Umur "<<endl;

cout<<"4. Urutkan Berdasarkan IPK"<<endl;

cout<<"5. Keluar Program"<<endl<<endl;

cout<<"Masukkan Pilihan Anda : ";

enqueue(mahasiswa data[5]) {

if (r == n -1){

cout<<"Maaf, Antrian sudah penuh"<<endl;

getch();

} else {

if (f == -1){

f = 0;
}

r++;

cout<<"Masukkan data mahasiswa : "<<endl;

cout<<"Nama : ";

gets(data[r].nama);

cout<<"NIM : ";

cin>>data[r].nim;

cout<<"UMUR : ";

cin>>data[r].umur;

cout<<"IPK : ";

cin>>data[r].ipk;

tampil (mahasiswa data[5]){

int urutan = 1;

if (f == - 1){

cout<<"Belum Ada Antrian";


}

else {

head();

for (int i = f; i <= r; i++){

cout<<"|";

cout<<setiosflags(ios::right)<<setw(3)<<urutan<<" | ";

cout<<setiosflags(ios::left)<<setw(9)<<data[i].nim<<"| ";

cout<<setiosflags(ios::left)<<setw(19)<<data[i].nama<<"| ";

cout<<setiosflags(ios::left)<<setw(6)<<data[i].umur<<"| ";

cout<<setiosflags(ios::left)<<setw(5)<<data[i].ipk<<"| ";

cout<<endl;

urutan++;

tutup();

getch();

dequeue(mahasiswa data[5]){

char konfirmasi ;

if (f == - 1 || f > r) {

cout<<"Antrian Kosong";
getch();

} else {

cout<<"Data yang dihapus dari antrian adalah : "<<endl;

cout<<"Nama : "<<data[f].nama<<endl;

cout<<"NIM : "<<data[f].umur<<endl;

cout<<"Umur : "<<data[f].nim<<endl;

cout<<"IPK : "<<data[f].ipk<<endl;

cout<<"Keperluan : ";

cout<<endl;

cout<<"Anda yakin menghapus data tersebut (Y/N)? ";

cin>>konfirmasi;

if (konfirmasi == 'Y' || konfirmasi == 'y'){

cout<<"Data Telah Terhapus";

f++;

}else {

cout<<"Data Batal Dihapus";

main(){
struct mahasiswa dataMahasiswa[5];

int pil;

do{

clrscr();

judul();

menu();

cin>>pil;

switch(pil){

case 1: enqueue(dataMahasiswa);

break;

case 2: tampil(dataMahasiswa);

break;

case 3: cout<<"Anda Akan Keluar Dari Program"<<endl;

break;

default: cout<<"Maaf, Anda salah memasukkan pilihan"<<endl;

} while(pil != 4);

}
-Hasil output
D.Kesimpulan

Pengurutan atau sorting merupakan proses dasar yang ada dalam sebuah algoritma dan
struktur data. Pada pemrograman, sorting merupakan bagian yang cukup sering dipergunakan.
Tujuan utama dari proses pengurutan atau sorting adalah untuk mengurutkan data berdasarkan
keinginan baik itu dari yang terendah maupun yang tertinggi, sehingga data yang dihasilkan
akan lebih terstruktur, teratur dan sesuai dengan kebutuhan. Terdapat beberapa algoritma yang
cukup populer untuk mengurutkan data, seperti quick sort dan merge sort.

Anda mungkin juga menyukai