0% found this document useful (0 votes)
14 views25 pages

Homework 9 Praktikum Pemrograman

The document discusses sorting algorithms and compares their running times. It includes code to implement insertion sort, selection sort, and the C++ STL sort() function. Testing was done on sample data sizes of 100, 1000, 10000, and 100000 elements. Results show that STL sort() generally has shorter running times than insertion or selection sort, with no noticeable delays.

Uploaded by

farsyaalaika75
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
14 views25 pages

Homework 9 Praktikum Pemrograman

The document discusses sorting algorithms and compares their running times. It includes code to implement insertion sort, selection sort, and the C++ STL sort() function. Testing was done on sample data sizes of 100, 1000, 10000, and 100000 elements. Results show that STL sort() generally has shorter running times than insertion or selection sort, with no noticeable delays.

Uploaded by

farsyaalaika75
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 25

Nama : Farsya Alaika

NIM : 23/511982/PA/21861
HOMEWORK 9
SORTING

1. (20 poin) Buatlah suatu program yang berguna untuk menghitung median dari suatu
array yang berisikan N bilangan bulat!
Jawab :
 Source Code
#include <iostream>
using namespace std;

void sorting(int arr[], int x) {


for (int i=0; i<x-1; i++) {
for (int j=0; j<x-i-1; j++) {
if (arr[j]>arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}

int main () {
int n;
cout << "Masukkan jumlah banyaknya data : ";
cin >> n;

cout << "Masukkan data : ";


int arr[n];
for (int i=0; i<n; i++) {
cin >> arr[i];
}

sorting(arr, n);
cout << "Data yang sudah diurutkan : ";

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


cout << arr[i] << " ";
}
cout << endl;

float med;
if (n%2 == 0) {
int mid1 = n/2 - 1;
int mid2 = n/2;
med = (float) (arr[mid1] + arr[mid2])/2;
}
else {
int mid3;
mid3 = n/2;
med = arr[mid3];
}
cout << "Median dari data yang diberikan : " << med;

return 0;
}
 Hasil Pemrograman

2. (40 poin) Buatlah program yang memungkinkan user untuk memilih:


a. Masukkan berapa banyak data yang akan diurutkan
b. Buatlah random data
Jawab :
 Source Code (untuk c, d, e, dan f)
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

// c ascending-insertion sort
void insertSort_Asc(int arr[], int x) {
int a, temp;
for (int i=1; i<x; i++){
a = i-1;
temp = arr[i];

while(arr[a] > temp && a>=0) {


arr[a+1] = arr[a];
a--;
}
arr[a+1] = temp;
}
for (int i=0; i<x; i++) {
cout<< arr[i] << " ";
}
cout << endl;
}

// d descending-insertion sort
void insertSort_Desc(int arr[], int x) {
int a, temp;
for (int i=1; i<x; i++){
a = i-1;
temp = arr[i];

while(arr[a] < temp && a>=0) {


arr[a+1] = arr[a];
a--;
}
arr[a+1] = temp;
}
for (int i=0; i<x; i++) {
cout<< arr[i] << " ";
}
cout << endl;
}

// e ascending-selection sort
void selectSort_Asc(int arr[], int x) {
int temp;
for (int i=0; i<x; i++){
int min = i;
for (int j=i+1; j<x; j++) {
if (arr[j] < arr[min]) {
min = j;
}
}
temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
for (int i=0; i<x; i++) {
cout<< arr[i] << " ";
}
cout << endl;
}

// f descending-selection sort
void selectSort_Desc(int arr[], int x) {
int temp;
for (int i=0; i<x; i++){
int min = i;
for (int j=i+1; j<x; j++) {
if (arr[j] > arr[min]) {
min = j;
}
}
temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
for (int i=0; i<x; i++) {
cout<< arr[i] << " ";
}
cout << endl;
}

int main () {
cout << "PROGRAM SORTING" << endl;

int n;
cout << "Masukkan jumlah banyaknya data : ";
cin >> n;
int data[n];

srand(time(0));
for (int i=0; i<n; i++) {
data[i] = rand()%100;
}

cout << "Metode sorting :" << endl;


cout << "1. Ascending - INSERTION SORT" << endl;
cout << "2. Descending - INSERTION SORT" << endl;
cout << "3. Ascending - SELECTION SORT" << endl;
cout << "4. Descending - SELECTION SORT" << endl;

int metode;
cout << "Metode sorting yang dipilih (contoh : 1) :
";
cin >> metode;

cout << "Hasil sorting : ";


switch (metode) {
case 1:
insertSort_Asc(data, n);
break;
case 2:
insertSort_Desc(data, n);
break;
case 3:
selectSort_Asc(data, n);
break;
case 4:
selectSort_Desc(data, n);
break;
}
return 0;
}
c. Urutkan data secara ascending dengan menggunakan metode insertion sort
 Hasil Pemrograman
100 data
1000 data

10000 data
100000 data

 Running Time
Banyak Data Running Time
(seconds)
100 3.539
1000 6.653
10000 7.538
100000 34.23

d. Urutkan data secara descending dengan menggunakan metode insertion sort


 Hasil Pemrograman
100 data
1000 data

10000 data

100000 data
 Running Time
Banyak Data Running Time
(seconds)
100 4.249
1000 4.298
10000 7.19
100000 36.04

e. Urutkan data secara ascending dengan menggunakan metode selection sort


 Hasil Pemrograman
100 data

1000 data
10000 data

100000 data
 Running Time
Banyak Data Running Time
(seconds)
100 3.982
1000 5.435
10000 6.719
100000 41.9

f. Urutkan data secara descending dengan menggunakan metode selection sort


 Hasil Pemrograman
100 data
1000 data

10000 data

100000 data
 Running Time
Banyak Data Running Time
(seconds)
100 2.373
1000 3.172
10000 7.664
100000 42.1

Coba gunakan 100 data, 1000 data, 10000 data, dan 100000 data. Untuk setiap
metode sort, tuliskan running time-nya. Buatlah tabel yang menunjukkan hasilnya.

3. (40 poin) Buatlah program untuk mengimplementasikan fungsi STL C++ sort(). Coba
gunakan 100 data, 1000 data, 10000 data, dan 100000 data. Bandingkan running-
timenya dengan hasil yang ada di soal nomor 1.
Jawab :
a. Ascending
 Source Code
#include <bits/stdc++.h>
using namespace std;

void printNum(int num[], int size) {


for (int i=0; i<size; i++) {
cout << num[i] << " ";
}
cout << endl;
}
int main () {
int n;
cout << "Masukkan jumlah data : ";
cin >> n;

int num[n];
srand(time(0));
for (int i=0; i<n; i++) {
num[i] = rand();
}
cout << "\nData sebelum sorting : ";
printNum(num, n);
clock_t start, end;
start = clock ();
sort(num, num+n);

cout << "\nData setelah sorting : ";


for (int i=0; i<n; i++) {
cout << num[i] << " ";
}
cout << endl;
end = clock();

double time = double(end-start)/CLOCKS_PER_SEC;


cout << "Waktu : " << time << " detik" << endl;

return 0;
}
 Hasil Pemrograman
100 data

1000 data
10000 data

100000 data

Banyak Data Running Time


(detik)
100 0.019
1000 0.251
10000 2.547
100000 28.275
Proses sorting ascending menggunakan STL sort() secara umum membutuhkan waktu
yang lebih singkat dan tidak terdapat delay.
Descending
 Source Code
#include <bits/stdc++.h>
using namespace std;

void printNum(int num[], int size) {


for (int i=0; i<size; i++) {
cout << num[i] << " ";
}
cout << endl;
}
int main () {
int n;
cout << "Masukkan jumlah data : ";
cin >> n;

int num[n];
srand(time(0));
for (int i=0; i<n; i++) {
num[i] = rand();
}
cout << "\nData sebelum sorting : ";
printNum(num, n);
clock_t start, end;
start = clock ();
sort(num, num+n, greater <int>());

cout << "\nData setelah sorting : ";


for (int i=0; i<n; i++) {
cout << num[i] << " ";
}
cout << endl;
end = clock();

double time = double(end-start)/CLOCKS_PER_SEC;


cout << "Waktu : " << time << " detik" << endl;

return 0;
}
 Hasil Pemrograman
100 data
1000 data

10000 data

100000 data

Banyak Data Running Time


(detik)
100 0.02
1000 0.258
10000 3.016
100000 24.773
Proses sorting descending menggunakan STL sort() secara umum membutuhkan
waktu yang lebih singkat dan tidak terdapat delay.

Tabel perbandingan running time tiap data menggunakan fungsi STL C++ sort()
Running Time
Banyak Ascendin Descending
Data g
Insertion Selection STL Insertion Selection STL
Sort Sort sort() Sort Sort sort()
100 3.539 3.982 0.019 4.249 2.373 0.02
1000 6.653 5.435 0.251 4.298 3.172 0.258
10000 7.538 6.719 2.547 7.19 7.664 3.016
100000 34.23 41.9 28.275 36.04 42.1 24.773

Dari tabel perbandingan diatas, dapat disimpulkan bahwa , program dengan fungsi
STL sort() membutuhkan waktu yang lebih singkat jika dibandingkan dengan
program yang menggunakan insertion sort ataupun selection sort. Tapi perbedaan
waktunya tidak terlalu signifikan

4. (Pengayaan) Selesaikan soal pada link berikut:


https://tlx.toki.id/courses/competitive/chapters/03/problems/H
Jawab :
 Source Code
#include <bits/stdc++.h>
using namespace std;

struct data_t {
double weight;
double price;
};

bool cmp (data_t a, data_t b) {


return a.price/a.weight > b.price/b.weight;
}

int main () {
int N, X;
cin >> N >> X;
data_t rice [N+1];
double cap = 0;
double cost = 0;

for (int i=1; i<=N; i++) {


cin >> rice[i].weight;
}
for (int i=1; i<=N; i++) {
cin >> rice[i].price;
}
sort(rice+1, rice+N+1, cmp);

for(int i=1; i<=N; i++) {


if (cap+rice[i].weight <= X) {
cap += rice[i].weight;
cost+= rice[i].price;
}
else {
cost +=
((X-cap)/rice[i].weight)*rice[i].price;
cap += X-cap;

if(cap == X) {
break;
}
}
}
cout << fixed << setprecision(5);
cout << cost;
}
 Hasil Pemrograman

You might also like