Anda di halaman 1dari 22

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 :

Bimo Ahmad Ramadhan (170533628584)

S1 PTI’17 OFF A

UNIVERSITAS NEGERI MALANG


FAKULTAS TEKNIK
JURUSAN TEKNIK ELEKTRO
PRODI S1 PENDIDIKAN TEKNIK INFORMATIKA
FEBRUARI 2018
Latihan (Percobaan)
#include <stdio.h>

#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!";

void Input () {

cout<<"Masukkan jumlah data = ";

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!";

void Tampil () {

cout<<"Data yang di inputkan : ";

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

cout<<" "<<data[i];

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 = ";

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);

Output Program :
Analisis :
Pada program di atas Merupakan kombinasi antara sorting dan searching, gabungan
antara input data, bubble sort, selection sort, exchange sort, Pada program di atas
menggunakan header file #include <windows.h>. kemudian program tersebut, Pada
penyisipan elemen, maka elemen-elemen lain akan bergeser ke belakang. Dan begantian
sesuai yang dimasukkan pada inputan ( void tukar (int a, int b) { int
temp; ) dan dari bubble sort (void bubble_sort () {) tetapi menggunakan for
((int i=1; i<n; i++)), kemudian menggunakan selection sort menggunakan
(int pos, i, j;) dan exchange sort menggunakan for (int pos, i, j;).
ulangi terus secara rekursif terhadap kedua pruh struktur tersebut.

A. LATIHAN PRAKTIKUM
1. Latiihan 1
a. Nama Program : Program Sorting Data dengan Metode buble sort.
/*Bubble Sorting*/
#include <iostream.h>
#include <iomanip.h>

using namespace std;


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";
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 mengurutkan data yang sudah ada dengan menggunakan
bubble sort. int NumList[10]={12,29,56,4,31,9,17,19,48,3}; bubble
sort membandingkan dua elemen berdekatan yang dilakukan dari belakang,
tergantung perintahnya. yang diminta asscending atau desscending.
cout<<"Data Angka Sebelum diurutkan : \n"; . maka membandingkan
mana angka yang lebih kecil atau lebih besar sesusai urutan tata letaknya . jika
lebih besar atau lebih kecil (tata urutannya salah) maka lakukan
pertukaran(swap). jika tidak lanjutkan ke proses traversal lainnya sampai
urutannya benar. Penggunaan iostream dalam kode blocks tidak menggunakan
“.h” dan ditambah dengan using namespace std. algoritma program diatas
singkatnya adalah terdapat 10 data maka akan terjadi 9 langkah. Langkah
pertama adalah menentukan 12 dan 29 apakah sudah benar posisinya, karena
ascending maka A[i]>A[i+1] geser kanan. Maka 12 dan 29 berpindah logikanya
12>29 tidak ada 12<29. Kemudian seterusnya sampai 9 kali tahap hingga
menghasilkan output terurut secara urut dari utrutan terkecil menuju urutan
terbesar.
2. Latihan 2
a. Nama Progam : Program sorting data dengan selection sort.
/*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])//Penmbanding
{
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 :

Program di atas digunakan untuk menampilkan kalimat. Pada


program di atas menggunakan header file #include <iostream.h> yang
berfungsi untuk memanggil fungsi dari cin dan cout, int main () deklarasi fungsi
main berjenis data integer, { (berfungsi untuk membuka script pemrograman
Program diatas menggunakan metode selection sort untuk mengurutkan
beberapa bilangan. kemudian lakukan terus penukaran nilai sampai semua
struktur data tidak ada yang tdak di seleksi. Algoritma program diatas
adalah menggunakan pembanding dan posisi. Angka tersebut di urutkan
kemudian di posusikan barulah dilakukan pertukaran bilangan apabila
memenuhi syarat. Seperti program diatas : 12,29,56,4,31,9,17,19,48,3.
Pembandingnya terdiri dari 5<34 maka posisinya 0 karena suda benar
peletakkan, karena pembanding ini salah maka harus dilakukan
swap”penukaran” sebanyak 7x. begitu seterusnya sehingga bilangan
menjadi urut, karena ada 10 data maka akan terjadi tahapan sebanyak 9 kali.
3. Latihan 3
a. Nama Program : Program shell sort.
/*Shell Sorting*/
#include <iostream.h>

using namespace std;


int main()
{
int array[5]; //An Array of Integer
int length=5; //Length of the array
int i,j,d;
int tmp,flag;

//some input
for(i=0;i<length;i++)
{
cout<<"enter a number : ";
cin>>array[i];
}

//algorithm
d=length;
flag=1;

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 :
Program di atas digunakan untuk menampilkan kalimat. Pada program di atas
menggunakan header file #include <iostream.h> yang berfungsi untuk
memanggil fungsi dari cin dan cout Program diatas menggunakan metode sheel
short yang sistematika membandingkan elemen pertama dengan elemen lain
yang berada dalam jarak yang sama namun yang lingkupnya paling jauh.
Algroitma program diatas adalah karena sistematikanya membandingkan
antar elemen yang letaknya berjauhan sampai terdekat maka seperti ini
ilustrasinya : angka yang diinputkan tergantung pengguna. Memanggilan
Array (array[i+d]=array[i];)Misalnya ingin menginputkan 4 data maka
aka nada 4 data , misalnya 6 9 7 4 maka sistematika kerjanya adlaah 6 akan
dibandingkan dengan 4 , 7, 9 dari jarak terjauh-terdekat. Kemudian tentukan
jika ascending atau descending pernyataan bilangannya seperti apa contoh
6<4 dan lain sebagainya.

4. Latihan 4
a. Nama Program : Program Quick Sort
/*Quick Sort*/
#include<iostream>
#include<iomanip>
#include <conio.h>
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 :
Program di atas digunakan untuk menampilkan kalimat. Pada program di atas
menggunakan header file #include <iostream.h> yang berfungsi untuk
memanggil fungsi dari cin dan cout Program diatas menggunakan metode quick
sort ( void quickSort(int numbers[], int array_size)), struktur data
terdiri dari 1/0 maka kembalikan struktur data apa adanya, jangan diubah.
kemudian ambil sebuah elemen yang akan digunakan sebagai pivot biasanya
elemen paling kiri (pivot=left;) dan (q_sort(numbers, left, pivot-1);)
ulangi terus secara rekursif terhadap kedua pruh struktur tersebut.

5. Latihan 5
a. Nama Program : Program Radix Sort
/*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 di atas digunakan untuk menampilkan kalimat. Pada program di atas
menggunakan header file #include <iostream.h> yang berfungsi untuk
memanggil fungsi dari cin dan cout Program diatas meggunakan metode radix sort
yang sistematikanya adalah mengkategorikan data-data menjadi sub kumpulan
data sesuai dengan nilai radix-nya, mengkonkatenasinya, kemudian
mengkategorikannya kembali berdasar nilai radix lainnya. (void radixsort
(long *source, long *temp, long N)) dan (radixsort(data, temp,
100);)

B. TUGAS RUMAH
a. Nama Program : Program Sorting untuk abjad
#include<iostream>
#include<conio.h>
#include<windows.h>
using namespace std;

main()
{
int angka[20],a,b,c;
char huruf[20],kedua[20][20],pilihan;
cout<<"==============================\n";
cout<<"\t PROGRAM SORTING \n";
cout<<"==============================\n\n";
cout<<"Masukan jumlah maksimal: ";cin>>a;
for(b=0;b<a;b++)
{
cout<<"Masukan huruf ke "<<b+1<<" : ";cin>>huruf[b];
cout<<"Masukan angka ke "<<b+1<<" : ";cin>>angka[b];
cout<<"\n";
}
system("cls");
cout<<"\n tampilkan sebelum sorting: \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 sorting 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 :
Untuk program diatas yang menggunakan jenis descending menggunakan fungsi
typdef struct untuk peletakan tipe data char dan int yang dijadikan dalam satu
fungsi. Menggunakan array data untuk syarat metode sorting yang digunakan.
Menggunakan fungsi min. menggunakan perulangan for untuk fungsi sorting.
(cout<<"\n tampilkan sebelum sorting: \n";) dan (for(b=0;b<a;b++))
Menggunakan fungsi temp untuk penyimpanan sementara.( int
tmp,tmp1;tmp=huruf[c];tmp1=angka[c];) Menggunakan perulang for untuk
proses temp. menggunakan perulangan for untuk proses hasil sorting.
C. KESIMPULAN

1. Algoritma pengurutan adalah algoritma yang meletakkan elemen-elemen


suatu kumpulan data dalam urutan tertentu. Atau proses pengurutan data yg
sebelumnya disusun secara acak sehingga menjadi tersusun secara teratur
menurut suatu aturan tertentu.
2. Ada 2 jenis sorting : Ascending (naik) & Descending (turun).
3. Exchange Sort melakukan pembandingan antar data, dan melakukan
pertukaran apabila urutan yang didapat belum sesuai.
4. Prinsip dasar Insertion adalah secara berulang-ulang menyisipkan /
memasukan setiap elemen kedalam posisinya / tempatnya yg benar.
5. Quick sort banyak digunakan utk proses sorting,karena:
a) merupakan proses sorting yang umum digunakan.
b) mudah untuk diimplementasikan.
c) Prosesnya sangat cepat.
6. Untuk pemrograman konvensional maka pemeriksaan-pemeriksaan
pasangan tersebut harus dilakukan satu demi satu, misalnya oleh bubble-sort
dilakukan dari kanan ke kiri serta di dalam sejumlah iterasi.
7. Selection Sort , mencari elemen yang tepat untuk diletakkan di posisi yang
telah diketahui, dan meletakkannya di posisi tersebut setelah data tersebut
ditemukan.

Anda mungkin juga menyukai