You are on page 1of 11

TUGAS TAMBAHAN MODUL-04

Rina Ratnasari 10214097


ALGORITMA
1) Insertion Sort
Program ini berfungsi untuk mengurutkan data dari sebuah file dengan data
berupa bilangan random dan juga untuk menampilkan selang waktu yang diperlukan
untuk melakukan proses sorting dengan lebih teliti lagi. Pertama, akan dikeluarkan
file stream berkasdata.txt dengan perintah ofstream fout(berkasdata.txt). Untuk
membuat angka / data acak (random), maka dilakukan perintah srand((unsigned
int)time(NULL)). Kemudian dilakukan funsgi pengulangan for, dengan indeks suku
yang ditinjau adalah i=0 untuk i<1000. Dalam pengulangan tersebut akan ditampilkan
data pada berkasdata.txt dengan perintah fout << rand()%10000 << endl.
Kemudian untuk dapat membaca file berkasdata.txt tersebut pada program
agar dapat dilakukan proses sorting, maka dapat dilakukan dengan menggunakan
perintah yang ada pada library fstream. Pertama, dilakukan pengecekan file dengan
perintah if(fin.is_open()). Kemudian akan diperiksa jumlah baris dalam file.
Dilakukan pendeklarasian int N =0. Jika filenya sudah terbuka, maka akan
dilakukan fungsi pengulangan while dengan perintah while(!fin.eof()) { getline(fin,
line); cout << line. Jadi, jika saat dilakukan pengecekan jumlah baris belum
mencapai akhir file (end of file), akan dilakukan pengambilan baris. Kemudian
pengecekan jumlah baris akan diberhentikan dengan perintah fin.close().
Selanjutnya, pembukaan kembali dengan fin.open(ifn); fin.clear(). Lalu
didefinisikan array dari variabel double dengan double *berkasdata = new
double[N]. Kemudian dilakukan pembacaan data dari file dan penutupan kembali
sama seperti langkah sebelumnya. Untuk mengurutkan bilangan tersebut, dilakukan
deklarasi int k =0. Kemudian dilakukan fungsi for dalam for. Inisialisasi indeks i=j+1,
untuk i<N, maka jika data ke-i lebih besar dari data ke-j, akan dilakukan swap atau
tukar nilai antara data ke-i dan data ke-j, dan k++. Hal itu dilakukan dengan kondisi
i=i+1. Lalu inisialisasi indeks j = 0, untuk j < N-1, akan dilakukan pengulangan
langkah tukar nilai tadi dengan j++ (for dalam for).

Pada library ditambahkan library #include <ctime>, #include <ratio>, dan


#include <chrono>. Kemudian, sebelum bagian pengurutan array menggunakan
metode selection sort, tambahkan pendeklarasian untuk library chrono yaitu using
namespace

std::chrono;

high_resolution_clock::time_point

t1

high_resolution_clock::now(). Kode ini merupakan pendeklarasian sebagai waktu


awal

sebelum

dilakukannya

high_resolution_clock::time_point

proses
t2

sorting.

Lalu

digunakan

high_resolution_clock::now()

kode
yang

merupakan fungsi untuk menandakan sebagai waktu akhir dari pengurutan array
tersebut. Untuk menghitung waktu yang diperlukan dalam proses sorting dapat
digunakan perintah duration<double> dt = duration_cast<duration<double>>(t2t1). Dengan perhitungan tersebut, maka akan didapat selang waktu yang diperlukan
program untuk melakukan proses sorting dengan lebih teliti lagi. Sedangkan untuk
menampilkan waktu yang diperlukan dalam proses sorting pada konsol, dapat
dilakukan dengan menggunakan perintah cout << time difference (s): <<
dt.count(). Lalu ditampilkan pula pada konsol berapa kali program melakukan tukar
nilai sampai semua array memiliki nilai yang berurutan dengan perintah cout <<
Sub-process: << k;.

2) Metode Rata-Rata
Program ini digunakan untuk mengurutkan data dari file berkasdata.txt dan
menuliskan hasilnya dalam data-out.txt

yang telah ada sehingga proses

mengurutkannya tidak lagi menggunakan algoritma selection sort. Pertama,


deklarasikan file untuk input dan output, yaitu char ifn[] = berkasdata.txt; dan
char ofn[] = data-out.txt. Untuk membuka file input, maka lakukan perintah
ifstream fin; fin.open(ifn). Kemudian periksa jumlah baris data (satu kolom) dari
berkasdata.txt dengan mendeklarasikan int N=0 dan string line sebagai perintah
ambil baris. Kemudian digunakan fungsi pengulangan while untuk mengetahui
apakah pembacaan sudah sampai akhir (end of file) atau belum, jika belum, maka
proses ambil baris akan terus dilakukan.
Kedua, definisikan array baru dengan double *berkasdata = newdouble[N].
Kemudian lakukan kembali proses buka file dengan perintah fin.open(ifn);
fin.clear(). Untuk mendapatkan data ke array, deklarasikan int i = 0, kemudian
lakukan fungsi pengulangan while untuk melakukan proses ambil baris. Setelah
selesai, tutup kembali file dengan fin.close(). Ketiga, tentukan nilai rata-rata dari data

dengan terlebih dahulu mendeklarasikan double sum = 0.0; double avg = 0.0.
Kemudian hitung rata-rata data dengan avg = sum / N. Untuk mengetahui nilai sum,
dapat dilakukan dengan fungsi pengulangan for.
Keempat, pecah data menjadi dua kelompok, yaitu yang lebih kecil dan lebih
besar dari nilai rat-rata. Terlebih dahulu deklarasikan variabel kelompok bawah dan
atas, yaitu double *bawah = new double[N]; dan double *atas = new double[N].
Kemudian inisialisasi int j = 0; int 1=0. Untuk mengetahui data berkas bawah dan
atas, maka dapat dicari dengan menggunakan fungsi pengulangan for. Kelima,
lakukan selection sort untuk kedua kelompok data tersebut. Namun, sebelum
dilakukan

proses

sorting,

tambahkan

using

namespace

std::chrono;

high_resolution_clock::time_point t1 = high_resolution_clock::now(); sebagai


patokan waktu awal sebelum dilakukannya proses pengurutan data. Kemudian
lakukan pendeklarasian int Nbawah = j; dan int Natas= 1. Untuk melakukan sorting
menggunakan kelompok nilai yang berada di bawah rata-rata, lakukan dengan fungsi
pengulangan for dalam for. Inisialisasi indeks i=j+1, untuk i<Nbawah, jika data
bawah ke-i lebih kecil dari data bawah ke-j, maka akan dilakukan swap (tukar nilai)
antara data bawah ke-i dan data bawah ke-j. Hal ini dilakukan dengan kondisi i++.
Fungsi for ini berada dalam fungsi for yang diinisisalisasi indeksnya j=0 untik
j<Nbawah-1 dan dilakukan pengulangan dengan kondisi j++. Begitupun untuk
melakukan sorting menggunakan kelompok data yang berada di atas rata-rata dapat
dilakukan dengan langkah yang sama, tinggal di ganti variabel bawah dengan variabel
atas.
Keenam, gabungkan kedua data tersebut dengan mendeklarasikan int
Nkombinasi = Natas + Nbawah; double *kombinasi = new double[Nkombinasi].
Untuk menggabungkan kedua array data tersebut, dilakukan fungsi pengulangan for,
dengan inisialisasi indeks i=0 untuk i<Nkombinasi, jika i<Nbawah, maka
kombinasi[i] = bawah[i], jika i>Nbawah, maka kombinasi[i] = atas[i
(Nbawah+1)]; Setelah itu, tuliskan high_resolution_clock::time_point t1 =
high_resolution_clock::now(); sebagai penanda waktu akhir dari proses sorting.
Untuk menghitung waktu yang diperlukan dalam proses pengurutan maka dapat
dilakukan

dengan

perintah

duration<double>

dt

duration_cast<duration<double>>(t2-t1). Untuk menampilkan hasilnya, dapat


dilakukan dengan perintah cout << Time difference 9s): << dt.count(). Untuk
dapat menuliskan data ke file output, dapat dilakukan dengan menggunakan perintah

yang ada dalam library fstream, ofstream fout; fout.open(ofn); kemudian lakukan
fungsi pengulangan for untuk menuliskan gabungan kedua data tersebut. Setelah itu
tutup file output dengan fout.close().

KODE PROGRAM
1) Insertion Sort

2) Metode Rata-Rata

HASIL
1) Selection Sort
//Hasil program

SELECTION SORT (SUB-PROSES)


SUBPROSES

500000000
450000000
400000000
350000000
300000000
250000000
200000000
150000000
100000000
50000000
0

450002921

SELECTION SORT

17

2717

239641

10

100

1000

18534819
JUMLAH DATA

10000

100000

SELECTION SORT (WAKTU)

WAKTU (s)

37.36175

40
35
30
25
20

SELECTION SORT (WAKTU)

15
10
5

0.000003

0.000136

0.012395

0.798282

10

100

1000

10000

JUMLAH DATA

2) Metode Rata-Rata
//Hasil Program

100000

METODE RATA-RATA

RATA-RATA

5300
5181.31

5200
5100

5018.75
4970.53

5000

4990.89
METODE RATA-RATA

4843.1

4900
4800
4700
4600

JUMLAH DATA

10

100

1000

10000

100000

METODE RATA-RATA (WAKTU)


WAKTU (s)
18.9059

20
18
16
14
12

METODE RATA-RATA
(WAKTU)

10
8
6
4
2

0.000003

0.000059

0.005851

0.460948

10

100

1000

10000

JUMLAH DATA

100000

You might also like