Anda di halaman 1dari 18

LAPORAN PRAKTIKUM II

SORTING (PENGURUTAN)

Disusun untuk Memenuhi Matakuliah Praktikum Algoritma dan Struktur Data


Dibimbing oleh Bapak Wahyu Nur Hidayat, S.Pd., M.Pd.

Oleh :

Dendi Yudha Kusuma (170533628625)

S1 PTI’17 OFF A

UNIVERSITAS NEGERI MALANG


FAKULTAS TEKNIK
JURUSAN TEKNIK ELEKTRO
PRODI S1 PENDIDIKAN TEKNIK INFORMATIKA
FEBRUARI 2018
A. LATIHAN PERCOBAAN
a. Kode Program
#include <conio.h>
#include <windows.h>
#include <iostream.h>
int data[10], data2[10];
int n;
void tukar (int a, int b) {
int temp;
temp = data[b];
data[b] = data[a];
data[a] = temp;
cout<<"\n";
}
void bubble_sort () {
for (int i=1; i<n; i++) {
for (int j=n-1; j>=i; j--) {
if (data[j] < data[j-1])
tukar(j,j-1);
}
}
cout<<"bubble sort selesai!"<<endl;
}
void exchange_sort () {
for (int i=0; i<n-1; i++) {
for (int j = (i+1); j<n; j++) {
if (data[i] > data[j])
tukar(i,j);
}
}
cout<<"exchange sort selesai!"<<endl;
}
void selection_sort () {
int pos, i, j;
for (i=0; i<n-1; i++) {
pos = i;
for (j = i+1; j<n; j++) {
if (data [j] < data[pos])
pos = j;
}
if (pos != i) tukar (pos, i);
}
cout<<"selection sort selesai!"<<endl;
}
void insertion_sort () {
int temp, i, j;
for (i=1; i<n; i++) {
temp = data[i];
j = i-1;
while (data[j] < temp && j>=0) {
data[j+1] = data[j];
j--;
}
data[j+1] = temp;
}
cout<<"insertion sort selesai!"<<endl;
}
void Input () {
cout<<"Masukkan jumlah data = "<<endl;
cin>>n;
for(int i=0; i<n; i++) {
cout<<"Masukkan data " <<i+1<< "\t= ";
cin>>data[i];
data2[i] = data[i];
}
}
void AcakLagi () {
for (int i=0; i<n; i++) {
data[i] = data2[i];
}
cout<<"Data sudah teracak!"<<endl;
}
void Tampil () {
cout<<"Data : "<<endl;
for (int i=0; i<n; i++) {
cout<<data[i]<<endl;
}
cout<<"\n";
}
int main() {
system("cls");
int pil;
do {
system("cls");
cout<<"1. Input Data"<<endl;
cout<<"2. Bubble Sort"<<endl;
cout<<"3. Exchange Sort"<<endl;
cout<<"4. Selection Sort"<<endl;
cout<<"5. Tampilkan Data"<<endl;
cout<<"6. Acak"<<endl;
cout<<"7. Exit"<<endl;
cout<<"Pilihan = "<<endl;
cin>>pil;
switch(pil) {
case 1: Input();
break;
case 2: bubble_sort();
break;
case 3: exchange_sort();
break;
case 4: selection_sort();
break;
case 5: Tampil();
break;
case 6: AcakLagi();
break;
}
getch();
}
while (pil!=7);
}
b. Output Program
c. Analisa
Program diatas digunakan untuk melakukan sorting nilai yang menggunakan metode
sesuai dengan yang dipilih. Program memiliki 3 header, #include <conio.h> yang
digunakan untuk fungsi getch() #include <windows.h>yang digunakan untuk fungsi
sistem () setra #include <iostream.h> yang digunakan untuk fungsi cin dan cout.
Program memiliki 8 fungsi tambahan yaitu bubble_sort, insention_sort, input, tukar,
exchange_sort, selection_sort, acak lagi. Yang masing-masing memiliki fungsi berbeda-
beda. Fungsi input digunakan untuk menampung inputan data yang akan diurutkan atau
diproses. Fungsi bubble_sort digunakan untuk mengurutkan data secara ascending
menggunakan metode bubble_sort, nfungsi insention_sort digunakan untuk
mengurutkan data secara ascending menggunakan metode insention sort, fungsi
exchange_sort digunakan untuk mengurutkan data secara acending menggunakan cara
selection sort, fungsi tampil digunakan untuk menampilkan data yang telah diinput,
fungsi acak lagi digunakan untuk mengacak lagi data yang telah diinput atau diurutkan.

B. LATIHAN PRAKTIKUM
1. Percobaan 1
a. Kode Program
/*Bubble Sorting*/
#include <iostream.h>//digunakan untuk pemanggilan cin dan cout
#include <iomanip.h>//digunakan untuk pemanggilan setw
using namespace std;// memberitahukan kepada compiler akan
menggunakan semua fungsi dalam namespace std
int main()
{
int NumList[10]={12,29,56,4,31,9,17,19,48,3};
int temp;//sebagai tempat pertukaran data seperti di bawah
cout<<"Data Angka Sebelum diurutkan : \n";
for(int d=0; d<10; d++)
{
cout<<setw(3)<<NumList[d]<<" ";
}
cout<<"\n\n";
for(int a=0; a<10; a++)
for(int b=0; b<10; b++)
if (NumList [b]>=NumList[b+1])
{
temp=NumList[b];
NumList[b]=NumList[b+1];
NumList[b+1]=temp;
}
cout<<"data setelah diurutkan : \n";
for (int c=0; c<10; c++)
cout<<setw(3)<<NumList[c]<<" ";
cout<<endl;
}

b. Output Program

c. Analisis
Program diatas menggunakan header #include <iostream.h> dan
#include <iomanip.h>. script ini adalah script double sorting, yang pada hasil
akhirnya angka-angka terebut akan dikelompokkan dahulu setelah itu baru
diurutkan. Perintah for pada syntax di atas untuk mengulangi perintah sort pada
angkanya

2. Percobaan 2
a. Kode Program
/*Selection Sorting*/
#include <iostream.h>
#include <iomanip.h>
using namespace std;
void SelectionSort(int Array [], const int Size)
{
int i,j,small,temp;
for (i=0;i<Size;i++)
{
small=i;
for (j=0;j<Size;j++)
{
if (Array[j]>Array[small])//Pembanding
{
small=j;
temp=Array[i];
Array[i]=Array[small];
Array[small]=temp;
}
}
}
}
int main()
{
int NumList[10]={12,29,56,4,31,9,17,19,48,3};
int temp;
cout<<"Data Angka Sebelum diurutkan : \n";
for(int d=0; d<10; d++)
{
cout<<setw(3)<<NumList[d];
}
cout<<"\n\n";
SelectionSort(NumList,10);
cout<<"Data Setelah Diurutkan\n";
for (int a=0; a<10; a++)
cout<<setw(3)<<NumList[a]<<endl;
}
b. Output Program

c. Analisis
Pada program ini menggunakan int sebagai deklarasi utama. Hal yang
dilakukan pertama adalah membuat rumus SelectionSort(int Array [], const
int Size)dengan menggunakan array dan size sebagai deklarasi. Kemudian
memasukkan perulangan untuk hasil keluaran programnya, di bawahnya dibuat
perulangan for (j=0;j<Size;j++) untuk melakukan perhitungan selection sort.
Selanjutnya adalah proses utama dari sebuah program.int
NumList[10]={12,29,56,4,31,9,17,19,48,3}; yang digunakan sebagai angka
yang akan diurutkan. Kemudian menggunakan perulangan
cout<<setw(3)<<NumList[d]; untuk mengatur jarak angka pada program di
execute. kemudian dimasukkan rumus SelectionSort(NumList,10);
Yang sudah dibuat lalu dimasukkan nilai dari NumList yang berisi 10 angka dan
kemudian hasil keluaran program dikeluarkan dengan perulangan
cout<<setw(3)<<NumList[a]<<endl;

3. Percobaan 3
a. Kode Program
/*Shell Sorting*/
#include <iostream.h>
using namespace std;
int main()
{
int array[5]; //Array dari interger
int length=5; //Panjang array
int i,j,d;
int tmp,flag;
//input
for(i=0;i<length;i++)
{
cout<<"enter a number : ";
cin>>array[i];
}
//algorithm
d=length;
flag=1;
while (flag||(d>1))
{
flag=0;
d=(d+1)/2;
for (i=0;i<(length-d);i++)
{
if (array[i+d]>array[i])
{
tmp=array[i+d];
array[i+d]=array[i];
array[i]=tmp;
flag=1;
}
}
}
for(i=0;i<5;i++)
{
cout<<array[i]<<endl;
}
}
b. Output Program

c. Analisis
Pada program diatas menggunakan int sebagai deklarasi utama. Kemudian
yang dilakukan pengatur array dan panjang array int array[5]; int length=5.
Setelah memasukkan input harus mengatur perulangan for(i=0;i<length;i++)
masukan dari angka yang akan diurutkan cout<<"enter a number : ";
cin>>array[i];. Kemudian melakukan perulangan while (flag||(d>1)) dan
mengatur flag=0; d=(d+1)/2; Kemudian menggunakan perulangan for
(i=0;i<(length-d);i++) dimana nilai yang dimasukkan sudah diatur seperti
diatas dengan menggunakan pernyataan if (array[i+d]>array[i]) untuk
menyusun rumus pertukaran shell sort. Pada keluaran yang dihasilkan menggunakan
perulangan for(i=0;i<5;i++) dan cout<<array[i]<<endl;

4. Percobaan 4
a. Kode Program
/*Quick Sort*/
#include<iostream>
#include<iomanip>
#include <conio.h>//untuk pemanggilan getch dll(tidak digunakan)
using namespace std;
void quickSort(int[], int);
void q_sort(int[], int, int);
int main()
{
int NumList[10]={12,29,56,4,31,9,17,19,48,3};
int temp;
cout<<"Data Sebelum Diurutkan: \n";
for(int d=0; d<10; d++)
{
cout<<setw(3)<<NumList[d];
}
cout<<"\n\n";
quickSort (NumList,10);
cout<<"Data Setelah Diurutkan: \n";
for (int iii=0; iii<10; iii++)
cout<<setw(3)<<NumList[iii]<<endl<<endl;
}

void quickSort(int numbers[], int array_size)


{
q_sort(numbers, 0, array_size-1);
}

void q_sort(int numbers[], int left, int right)


{
int pivot, l_hold, r_hold;

l_hold=left;
r_hold=right;
pivot = numbers[left];
while (left<right)
{
while((numbers[right]>=pivot) && (left<right))
right--;
if(left != right)
{
numbers[left]=numbers[right];
left++;
}
while ((numbers[left] <=pivot) && (left<right))
left++;
if (left != right)
{
numbers[right]=numbers[left];
right--;
}
}
numbers[left]=pivot;
pivot=left;
left=l_hold;
right=r_hold;
if (left<pivot)
q_sort(numbers, left, pivot-1);
if (right>pivot)
q_sort(numbers, pivot+1, right);
}
b. Output Program

c. Analisis
Script diatas digunakan untik menjalankan perintah quick sort, dimana pada
outputnya memprogram sorting secara cepat atau langsung mulai dari yang
ascending ataupun descending. 3 header yang digunakan adalah <iostream>,
<iomanip>, dan <conio.h> dengan masing-masing perintahnya. Pada deklarasi
variabel quicksort(int[] berisi angka yang akan diurutkan. Kemudian setelah
assigment ada fungsi void, yang digunakan saat program sorting dijalankan

5. Percobaan 5
a. Kode Program
/*Radix Sort*/
#include <iostream>
#include <stdlib.h>
#include <string.h>
using namespace std;
void radix (int byte, long N, long *source, long *dest)
{
long count[256];
long index[256];
memset(count, 0, sizeof (count));
for (int i=0; i<N; i++) count[((source[i])>>(byte*8))&0xff]++;
index[0]=0;
for(int i=1; i<256; i++)index[i]=index[i-1]+count[i-1];
for(int i=0; i<N; i++) dest
[index[((source[i])>>(byte*8))&0xff]++]=
source[i];
}
void radixsort (long *source, long *temp, long N)
{
radix (0, N, source, temp);
radix (1, N, temp, source);
radix (2, N, source, temp);
radix (3, N, temp, source);
}
void make_random (long *data, long N)
{
for(int i=0; i<N; i++) data[i]=rand()|(rand()<<16);
}
long data [100];
long temp [100];
int main(void)
{
make_random(data, 100);
radixsort(data, temp, 100);
for(int i=0; i<100; i++) cout<<data[i]<<'\n';
}
b. Output Program\

c. Analisis
Program tersebut menggunakan metode Radix sort. Sistematisnya Radix sort
adalah mengkategorikan data-data menjadi sub kumpulan data sesuai dengan nilai
radixnya, mengkonkatenasinya, kemudian mengkategorikannya kembali berdasar
nilai radix yang lainnya

C. TUGAS RUMAH
a. Kode Program
#include<iostream>
#include<conio.h>
#include<windows.h>
using namespace std;
int main()
{
int angka[20],a,b,c;
char huruf[20];
cout<<"************************************\n";
cout<<" = PASANGAN HURUF & ANGKA =\n";
cout<<"************************************\n\n";
cout<<" Masukkan Jumlah Maksimal: ";cin>>a;
for(b=0;b<a;b++)
{
cout<<"\n Masukkan huruf ke "<<b+1<<" : ";cin>>huruf[b];
cout<<" Masukan angka ke "<<b+1<<" : ";cin>>angka[b];
}
cout<<"\n==================================\n";
cout<<"\nTampilkan Sebelum Di Urutkan: \n";
for(b=0;b<a;b++)
{
cout<<huruf[b]<<" ";
}
cout<<"\n";
for(b=0;b<a;b++)
{
cout<<angka[b]<<" ";
}
for(b=0;b<a-1;b++){
for(c=0;c<a-1-b;c++){
if(huruf[c]>huruf[c+1])
{
int tmp,tmp1;
tmp=huruf[c];
tmp1=angka[c];
huruf[c]=huruf[c+1];
huruf[c+1]=tmp;
angka[c]=angka[c+1];
angka[c+1]=tmp1;
}
}
}
cout<<"\n\nSetelah Di Urutkan Berdasarkan Huruf :\n";
cout<<"\n";
for(b=0;b<a;b++){
cout<<huruf[b]<<" ";
}
cout<<"\n";
for(b=0;b<a;b++){
cout<<angka[b]<<" ";
}
}
b. Output Program

c. Analisis
Pada program diatas menggunakan int sebagai deklarasi .Kemudian memasukkan
int angka[20],a,b,c; char huruf[20];. Lalu kita memasukkan cout<<"
Mas2ukkan Jumlah Maksimal: ";cin>>a; sebagai input pertama. Kemudian
cout<<"\n Masukkan huruf ke "<<b+1<<" : ";cin>>huruf[b]; cout<<"

Masukan angka ke "<<b+1<<" : ";cin>>angka[b]; dimana nilai inputan bisa


ditambahkan sesuai dengan jumlah masukkan maksimalnya. for(b=0;b<a;b++)
cout<<huruf[b]<<" "; merupakan keluaran dari data huruf yang belum diurutkan.
for(b=0;b<a;b++) cout<<angka[b]<<" "; merupakan sebagai keluaran dari data
angka yang belum diurutkan

for(b=0;b<a-1;b++){

for(c=0;c<a-1-b;c++){

if(huruf[c]>huruf[c+1])

Rumus diatas menggunakan buble sort untuk mengurutkan huruf yang sudah diinputkan
secara ascending. Kemudian menggunakan for(b=0;b<a;b++){ cout<<huruf[b]<<"
"; dan for(b=0;b<a;b++){ cout<<angka[b]<<" "; digunakan sebagai perintah
keluaran akhiran dari program ini.
D. KESIMPULAN
1. pengurutan (sotting) adalah proses pengurutan data yang sebelumnya disusun secara
acak sehingga tersusun secara teratur menurut aturan tertentu. Juga dalam membuat
program sorting, sebaiknya dikombinasikan dengan array.
2. Terdapat beberapa jenis sorting diantaranya adalah : buble sort, exchange short,
selection sort, insention sort, quick sort, shell short
3. Sorting memiliki dua jenis yaitu : ascending (naik) dan descending (turun)
4. Proses pengurutan data pada quick sort yaitu ada elemen yang selalu menjadi elemen
pusat (pivot)
5. Setiap jenis sorting memiliki kelebihan dan kekurangan masing-masing
6. Radix sort merupakan algoritma yang menyelesaikan data dengan cara
mengkategorikannya

Anda mungkin juga menyukai