LAPORAN PRAKTIKUM ALGORITMA DAN STRUKTUR (2)

LAPORAN PRAKTIKUM
ALGORITMA DAN STRUKTUR DATA I
SORTING
Modul VII

Disusun Oleh :
Syukur Jaya Mendrofa
201501072

Dosen Pengampu :
Oskar Ika Adi Nugroho S.T., MT

JURUSAN SISTEM INFORMASI
SEKOLAH TINGGI ILMU KOMPUTER (STIKOM)
“YOS SUDARSO”
PURWOKERTO
2016
BAB I
TEORI DASAR

Bubble Sort

Bubble sort (metode gelembung) adalah metode/algoritma pengurutan dengan cara
melakukan penukaran data dengan tepat sebelahnya secara terus menerus sampai bisa
dipastikan dalam satu iterasi tertentu tidak ada lagi perubahan. Jika tidak ada lagi perubahan
berarti data sudah terurut. Disebut pengurutan gelembung karena masing-masing kunci akan
dengan lambat menggelembung ke posisi yang tepat. Ilutrasi konsep dari bubble sort ini
adalah sebagai berikut: Cara pengurutannya : bandingkan dua data kemudian swap. Prinsip
kerja dari bubble sort adalah:
1.
2.
3.
4.

Pengecekan mulai dari data ke satu sampai data ke-n.
Bandingkan data ke-1 sampai data ke-n dengan data setelahnya.
Jika lebih besar maka tidak terjadi pemindahan atau swap.
Jika data sebelumnya kecil bila dibandingkan dengan data setelahnya besar maka

tidak akan terjadi pemindahan atau no swap.
5. Ulang langkah diatas sampai data bisa tersusun baik secara ascending maupun
descending. Sampai data terurutkan.

Metode pengurutan gelembung (Bubble Sort) diinspirasikan oleh gelembung sabun yang
berada di permukaan air. Karena berat jenis gelembung sabun lebih ringan daripada berat
jenis air, maka gelembung sabun selalu terapung ke atas permukaan. Prinsip di atas dipakai
pada pengurutan gelembung
Selection Sort
Selection sort adalah metode sorting dimana elemen di perbandingkan satu-persatu sampai
pada elemen terakhir dan disusun berdasarkan ketentuan-ketentuan berlaku (terbesar atau
terkecil). Ilutrasi konsep dari selection sort ini adalah sebagai berikut : Prinsip kerja selection
short:
1. Pengecekan dimulai data ke-1 sampai dengan ke-n.
2. Tentukan bilangan dengan indeks terkecil dari bilangan tersebut.
3. Tukar bilangan dengan indeks terkecil tersebut dengan bilangan pertama (I=1) dari
data bilangan tersebut.
4. Lakukan langkah 2 dan 3 untuk bilangan berikutnya (I=I+1) sampai didapatkan urutan
yang optimal.

Insertion Sort
Insertion sort adalah sebuah metode pengurutan data dengan menempatkan setiap elemen
data pada pisisinya dengan cara melakukan perbandingan dengan data – data yang ada.
Indeks algoritma dari metode insertion sort ini dapat dianalogikan sama seperti mengurutkan

kartu, dimana jika suatu kartu dipindah tempatkan menurut posisinya, maka kartu yang lain
akan bergeser mundur atau maju sesuai kondisi pemindahanan kartu tersebut. Dalam
pengurutan data, metode ini dipakai bertujuan untuk menjadikan bagian sisi kiri array
terurutkan sampai dengan seluruh array diurutkan. Penganalogian Insertion Sort dengan
pengurutan kartu. Berikut menjelaskan bagaimana algoritma Insertion Sort bekerja dalam
pengurutan kartu, Anggaplah kita ingin mengurutkan satu set kartu dari kartu yang bernilai
paling kecil hingga yang paling besar.
1. Dimulai dengan posisi tangan kosong, dan semua kartu berada diatas meja. Dan
anggaplah kita akan menyusun kartu ke tangan kiri kita.
2. Mengamil kartu pertama dari meja dan meletakannya ke tangan kiri.
3. Mengambil kartu kedua dan membandingkannya dengan kartu yang sudah ada di
tangan kiri.
4. Jika kartu yang diambil dari meja memenuhi syarat perbandingan, maka kartu tersebut
akan diletakan didepan kartu yang dibandingkan, serta kartu yang lain yang telah
dibandingkan akan bergeser mundur (ke belakang).
Proses ini akan berlangsung sampai semua kartu akan terurutkan dengan benar sesuai criteria
pengurutannya. Demikian juga halnya dalam pengurutan data. Jika data sudah ada, maka
pengurutan dimulai dengan mengambil satu data dan membandingkannya dengan data-data
yang ada didepannya. Jika data yang diambil memenuhi syarat perbandingan, maka data yang
diambil tersebut akan diletakan di depan data yang dibandingkan, kemudian data-data yang

dibandingkan akan bergeser mundur. Catatan: Dalam hal pengurutan data dengan metode
insertion sort ini, data yang diambil pertama adalah data kedua, kemudian data yang diambil
akan dibandingkan dengan data – data yang ada disebelah kiri / data sebelumnya (data- data
sebelum data yang diambil). Jika proses tersebut selesai, maka akan dilanjutkan dengan datadata selanjutnya (data ke-3, data ke-4… dan seterusnya). Proses akan berlangsung sampai
data – data terurutkan dengan benar.
Berikut adalah simulasi Algoritma Insertion Sort Jika digambarkan secara singkat, maka
algoritma Insertion sort ini dapat digambar sebagai berikut. Ilustrasi konsep insertion sort ini
adalah sebagai berikut:










7 [3] 4 1 8 2 6 5
3 7 [4] 1 8 2 6 5

3 4 7 [1] 8 2 6 5
1 3 4 7 [8] 2 6 5
1 3 4 7 8 [2] 6 5
1 2 3 4 7 8 [6] 5
1 2 3 4 6 7 8 [5]
1 2 3 4 5 6 7 [8]

Pengurutan data (sorting) didefinisikan sebagai suatu proses untuk menyusun kembali
humpunan obyek menggunakan aturan tertentu. Menurut Microsoft Book-shelf, definisi
algoritma pengurutan adalah algoritma untuk meletakkan kumpulan elemen data ke dalam
urutan tertentu berdasarkan satu atau beberapa kunci dalam tiap-tiap elemen. Ada dua macam
urutan yang biasa digunakan dalam proses pengurutan yaitu


Urut naik (ascending) yaitu dari data yang mempunyai nilai paling kecil sampai
paling besar



Urut Turun (descending) yaitu data yang mempunyai nilai paling besar sampai paling

kecil.

Contoh : data bilangan 5, 2, 6 dan 4 dapat diurutkan naik menjadi 2, 4, 5, 6 atau diurutkan
turun menjadi 6, 5, 4, 2. Pada data yang bertipe char, nilai data dikatakan lebih kecil atau
lebih besar dari yang lain didasarkan pada urutan relatif (collating sequence) seperti
dinyatakan dalam tabel ASCII (Lampiran) Keuntungan dari data yang sudah dalam keadaan
terurutkan antara lain :
1. Data mudah dicari (misalnya dalam buku telepon atau kamus bahasa), mudah untuk
dibetulkan, dihapus, disisipi atau digabungkan.

Dalam keadaan terurutkan, kita

mudah melakukan pengecekan apakah ada data yang hilang
2. Melakukan komppilasi program komputer jika tabel-tabel simbol harus dibentuk
3. Mempercepat proses pencarian data yang harus dilakukan berulang kali.
Data yang diurutkan sangat bervariasi, dalam hal jumlah data maupun jenis data yang akan
diurutkan. Tidak ada algoritma terbaik untuk setiap situasi yang kita hadapi, bahkan cukup
sulit untuk menentukan algoritma mana yang paling baik untuk situasi tertentu karena ada
beberapa faktor yang mempengaruhi efektifitas algoritma pengurutan. Beberapa faktor yang
berpengaruh pada efektifitas suatu algoritma pengurutan antara lain:



Banyak data yang diurutkan



Kapasitas pengingat apakah mampu menyimpan semua data yang kita miliki



Tempat penyimpanan data, misalnya piringan, pita atau kartu, atau media penyimpan
yang lain. Pemilihan algoritma sangat ditentukan oleh struktur data yang digunakan.
Metode pengurutan yang digunakan dapat diklasifikasikan menjadi dua katagori yaitu



Pengurutan internal, yaitu pengurutan dengan menggunakan larik (array).

Larik


tersimpan dalam memori utama komputer


Pengurutan eksternal, yaitu pengurutan dengan menggunakan berkas (sequential
access file).

Berkas tersimpan dalam pengingat luar, misalnya cakram atau pita magnetis. Untuk
menggambarkan pengurutan dengan larik, bisa kita bayangkan semua kartu terletak di
hadapan kita sehingga semua kartu terlihat dengan jelas nomornya. Pada penyusunan kartu
sebagai sebuah berkas, kita bayangkan semua kartu kita tumpuk sehingga hanya kartu bagian
atas saja yang bisa kita lihat nomornya.

BAB II
ANALISA PROGRAM
Program 1
#include
#include
#include
using namespace std;
class ArrayBub

{
private:
vector v; //vector v
int jumElemen; //jumlah item data
void tukar(int satu, int dua) //fungsi anggota private
{
double temp = v[satu];
v[satu] = v[dua]; v[dua] =
temp;
}
public:
ArrayBub(int maks) : jumElemen(0) //konstruktor
{
v.resize(maks); //ukuran vector
}
void sisip(double nilai) //menempatkan elemen ke dalam array
{
v[jumElemen] = nilai; //menyisipkan
jumElemen++; //mengdalamkremen ukuran
}

void tampil() //menampilkan isi array
{
for(int j=0; j variabel untuk menyimpan

jumElemen bertipe int. kelompok

private
 Void tukar(int satu, int dua) => fungsi void bernama tukar. kelompok private.

 Deklarasi fungsi void bernama tukar. kelompok private.

 Anggota kelas ArrayBub kelompok public
 ArrayBub(int maks) : jumElemen(0) //konstruktor kelompok public
 Deklarasi ArrayBub(int maks) : jumElemen(0) kelompok public

 Deklarasi fungsi void sisip(double nilai) kelompok public

 Deklarasi fungsi void tampil ( ) kelompok public

 Deklarasi fungsi void pengurutanBubble() kelompok public


 Int main => masuk ke fungsi utama program.
 Int ukuranMaks = 100 => variabel ukuranMaks bertipe int, dengan nilai/ukuran 100.
 ArrayBub arr(ukuranMaks); => variabel arr bertipe ArrayBub dengan ukuran
arraynya = ukuranMaks yaitu 100.
 arr.sisip(77) => variabel arr memanggil fungsi void sisip dengan menempatkan nilai
77 kedalam array.
 arr.sisip(99) => variabel arr memanggil fungsi void sisip dengan menempatkan nilai
99 kedalam array.
 arr.sisip(44) => variabel arr memanggil fungsi void sisip dengan menempatkan nilai
44 kedalam array.
 arr.sisip(55) => variabel arr memanggil fungsi void sisip dengan menempatkan nilai
55 kedalam array.
 arr.sisip(22) => variabel arr memanggil fungsi void sisip dengan menempatkan nilai
22 kedalam array.
 arr.sisip(88) => variabel arr memanggil fungsi void sisip dengan menempatkan nilai
88 kedalam array.

 arr.sisip(11) => variabel arr memanggil fungsi void sisip dengan menempatkan nilai
11 kedalam array.
 arr.sisip(00) => variabel arr memanggil fungsi void sisip dengan menempatkan nilai
00 kedalam array.
 arr.sisip(66) => variabel arr memanggil fungsi void sisip dengan menempatkan nilai
66 kedalam array.
 arr.sisip(33) => variabel arr memanggil fungsi void sisip dengan menempatkan nilai
33 kedalam array.
 arr.tampil(); variabel arr memanggil fungsi void tampil, maka akan tampil data
sebelum diurut.
 arr.pengurutanBubble(); variabel arr memanggil fungsi void pengurutanBubble()
untuk mengurutkan data.
 arr.tampil(); variabel arr memanggil fungsi void tampil maka akan tampil data setelah
diurut.
 system ("pause"); => program berhenti sejenak.
 return 0; => digunakan untuk mengembalikan nlai fungsi utama yaitu 0.

Program 2
#include
#include
#include
using namespace std;
class ArrayPenyisipan
{
private:
vector v; //vector v
int jumElemen; //jumlah item data
public:
ArrayPenyisipan(int max) : jumElemen(0) //konstruktor
{
v.resize(max); //ukuran vector
}
void sisip(double nilai) //menempatkan elemen ke dalam array
{
v[jumElemen] = nilai; //menyisipkan
jumElemen++; //menginkremen ukuran
}
void tampil() //menampilkan isi array
{

for (int j = 0; j variabel untuk menyimpan jumElemen bertipe int. kelompok
private
 Anggota kelas ArrayPenyisipan kelompok public
 ArrayPenyisipan (int maks) : jumElemen(0) //konstruktor kelompok public
 Deklarasi ArrayPenyisipan int maks) : jumElemen(0) kelompok public

 Deklarasi fungsi void sisip(double nilai) kelompok public

 Deklarasi fungsi void tampil ( ) kelompok public

 Deklarasi fungsi void pengurutanPenyisipan( )

 Int main => masuk ke fungsi utama program.
 Int ukuranMaks = 100 => variabel ukuranMaks bertipe int, dengan nilai/ukuran 100.
 ArrayPenyisipan arr(ukuranMaks); => variabel arr bertipe ArrayPenyisipan
dengan ukuran arraynya = ukuranMaks yaitu 100.
 arr.sisip(77) => variabel arr memanggil fungsi void sisip dengan menempatkan nilai
77 kedalam array.
 arr.sisip(99) => variabel arr memanggil fungsi void sisip dengan menempatkan nilai
99 kedalam array.
 arr.sisip(44) => variabel arr memanggil fungsi void sisip dengan menempatkan nilai
44 kedalam array.
 arr.sisip(55) => variabel arr memanggil fungsi void sisip dengan menempatkan nilai
55 kedalam array.
 arr.sisip(22) => variabel arr memanggil fungsi void sisip dengan menempatkan nilai
22 kedalam array.
 arr.sisip(88) => variabel arr memanggil fungsi void sisip dengan menempatkan nilai
88 kedalam array.
 arr.sisip(11) => variabel arr memanggil fungsi void sisip dengan menempatkan nilai
11 kedalam array.
 arr.sisip(00) => variabel arr memanggil fungsi void sisip dengan menempatkan nilai
00 kedalam array.
 arr.sisip(66) => variabel arr memanggil fungsi void sisip dengan menempatkan nilai
66 kedalam array.

 arr.sisip(33) => variabel arr memanggil fungsi void sisip dengan menempatkan nilai
33 kedalam array.
 arr.tampil(); variabel arr memanggil fungsi void tampil, maka akan tampil data
sebelum diurut.
 arr.pengurutanBubble(); variabel arr memanggil fungsi void pengurutanPenyisipan()
untuk mengurutkan data.
 arr.tampil(); variabel arr memanggil fungsi void tampil maka akan tampil data setelah
diurut.
 system ("pause"); => program berhenti sejenak.
 return 0; => digunakan untuk mengembalikan nlai fungsi utama yaitu 0.

Program 3
#include
#include
#include
#include
using namespace std;
class Orang
{
private:
string namaBelakang;
string namaDepan;
int usia;
public:
Orang(string belakang, string depan, int a) : //konstruktor
namaBelakang(belakang), namaDepan(depan), usia(a)
{}
void tampilOrang()
{
cout

variabel

arr

bertipe

ArrayPenyisipanObjek dengan ukuran arraynya = ukuranMaks yaitu 100.
 arr.sisip(“Rismon” string belakang, ”Sianipar” string depan, 24 int usia) => variabel
arr memanggil fungsi void sisip dengan menempatkan nilai 77 kedalam array.
Deklarasi fungsi void sisip(string belakang, string depan, int usia)
 arr.sisip(“Robert” string belakang, ”Tohonan” string depan, 37 int usia) => variabel
arr memanggil fungsi void sisip dengan menempatkan nilai 77 kedalam array.
Deklarasi fungsi void sisip(string belakang, string depan, int usia)
 arr.sisip(“Rico” string belakang, ”Chandra” string depan, 43 int usia) => variabel arr
memanggil fungsi void sisip dengan menempatkan nilai 77 kedalam array. Deklarasi
fungsi void sisip(string belakang, string depan, int usia)

 arr.sisip(“Rotua” string belakang, ”Marolop” string depan, 63 int usia) => variabel
arr memanggil fungsi void sisip dengan menempatkan nilai 77 kedalam array.
Deklarasi fungsi void sisip(string belakang, string depan, int usia)
 arr.sisip(“Rini” string belakang, ”Meika” string depan, 21 int usia) => variabel arr
memanggil fungsi void sisip dengan menempatkan nilai 77 kedalam array. Deklarasi
fungsi void sisip(string belakang, string depan, int usia)
 arr.sisip(“Eva” string belakang, ”Teti” string depan, 29 int usia) => variabel arr
memanggil fungsi void sisip dengan menempatkan nilai 77 kedalam array. Deklarasi
fungsi void sisip(string belakang, string depan, int usia)
 arr.sisip(“Patricia” string belakang, ”Siahaan” string depan, 72 int usia) => variabel
arr memanggil fungsi void sisip dengan menempatkan nilai 77 kedalam array.
Deklarasi fungsi void sisip(string belakang, string depan, int usia)
 arr.sisip(“Vivian” string belakang, ”Jozen” string depan, 54 int usia) => variabel arr
memanggil fungsi void sisip dengan menempatkan nilai 77 kedalam array. Deklarasi
fungsi void sisip(string belakang, string depan, int usia)
 arr.sisip(“Jodi” string belakang, ”Pratama” string depan, 22 int usia) => variabel arr
memanggil fungsi void sisip dengan menempatkan nilai 77 kedalam array. Deklarasi
fungsi void sisip(string belakang, string depan, int usia)
 arr.sisip(“Jonathan” string belakang, ”Sitanggang” string depan, 18 int usia) =>
variabel arr memanggil fungsi void sisip dengan menempatkan nilai 77 kedalam
array. Deklarasi fungsi void sisip(string belakang, string depan, int usia)
 cout