NIM : 232110076
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.
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.
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.
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
Mahasiswa Pengampu/Asisten
D. Uraian Pelaksanaan
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <algorithm>
//deklarasikan array
int arr[99];
int count = 0;
count++;
std::swap(arr[pivotIndex], arr[awal]);
i++;
j--;
std::swap(arr[i++], arr[j--]);
}
//kembalikan nilai index pivot
return pivotIndex;
quickSort(arr, p + 1, akhir);
tampil(int n){
getch();
}
int n;
n = a+1;
arr[n] = b;
return n;
judul(){
cout<<"=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-="<<endl;
cout<<"=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-="<<endl;
menu(){
cout<<"3. Keluar"<<endl<<endl;
main()
int n,pil,nilai;
n = -1;
do{
clrscr();
judul();
menu();
cin>>pil;
switch (pil) {
case 1:
cin>>nilai;
n = tambah(n,nilai);
break;
case 2:
quickSort(arr, 0, n);
tampil(n);
break;
case 3:
break;
default:
} 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
-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
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
arr[indexGabung] = arrKiri[indexKiri];
indexKiri++;
} else {
arr[indexGabung] = arrKanan[indexKanan];
indexKanan++;
}
indexGabung++;
arr[indexGabung] = arrKiri[indexKiri];
indexKiri++;
indexGabung++;
arr[indexGabung] = arrKanan[indexKanan];
indexKanan++;
indexGabung++;
int tengah;
if (kiri < kanan){
getch();
n = a+1;
arr[n] = b;
return n;
judul(){
cout<<"=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-="<<endl;
cout<<"=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-="<<endl;
menu(){
cout<<"3. Keluar"<<endl<<endl;
main()
{
int n,pil,nilai,arr[99];
n = -1;
do{
clrscr();
judul();
menu();
cin>>pil;
switch (pil) {
case 1:
cin>>nilai;
n = tambah(arr,n,nilai);
break;
case 2:
mergeSort(arr, 0, n);
tampil(arr, n);
break;
case 3:
break;
default:
} while(pil!=3);
}
- fungsi merge untuk memindah array asli ke array sementara, mengurutkan array sementara
dan kembalikan ke array asli :
-Deklarasikan array sebanyakan jumlah kanan dan kiri untuk, menampung data sementara
-Kemudian lakukan pengulangan dan simpan data dari array utama ke array kanan dan kiri
}
for (int j = 0; j<jmlKanan; j++){
-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.
-Masukan codingan
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <iomanip.h>
struct mahasiswa{
char nama[30];
double ipk;
float nilai;
};
judul(){
cout<<"=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-"<<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(){
enqueue(mahasiswa data[5]) {
if (r == n -1){
getch();
} else {
if (f == -1){
f = 0;
}
r++;
cout<<"Nama : ";
gets(data[r].nama);
cout<<"NIM : ";
cin>>data[r].nim;
cout<<"UMUR : ";
cin>>data[r].umur;
cout<<"IPK : ";
cin>>data[r].ipk;
int urutan = 1;
if (f == - 1){
else {
head();
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<<"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;
cin>>konfirmasi;
f++;
}else {
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;
break;
} 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.