Anda di halaman 1dari 44

LAPORAN PRAKTIKUM

STRUKTUR DATA
Modul Praktikum 10

Disusun oleh:

Nama : Siti Juhisa

NIM : 2107110677

Dosen : T. Yudi Hadiwandra, S.Kom, M.Kom

Asisten: : Arridho Pradana (1907113990)

Aielsa Naomi Athaya (1907113417)

PROGRAM STUDI TEKNIK INFORMATIKA


FAKULTAS TEKNIK
UNIVERSITAS RIAU
GENAP 2022/2023
A. TUGAS PENDAHULUAN
1. Tuliskan algoritma pengurutan insertion sort secara ascending?

Algoritma pengurutan insertion sort seacara ascending (dari terkecil)


adalah sebagai berikut :
1. Buat sebuah array data bertipe integer yang masih belum terurut.
2. Baca indeks ke-1 dan ke-2 array tersebut, bandingkan bilangan tersebut,
lalu nyatakan keadaannya.
3. Apabila indeks ke-1 lebih besar daripada indeks ke-2, saling tukar tempat
kedua bilangan pada array tersebut, bila indeks ke-1 lebih kecil atau
sama dengan bilangan indeks ke-2, maka tidak diperlukan pertukaran
posisi antara kedua indeks tersebut.
4. Tandai bahwasanya indeks sudah dibandingkan dan dibaca.
5. Lakukan langkah kedua dan terapkan metode langkah ke-3 kepada indeks
ke-2 dan indeks ke-3.
6. Pindahkan bilangan sesuai dengan urutannya yang benar untuk setiap
bilangan yang baru di bandingkan dan ternyata lebih kecil daripada
bilangan yang telah dibandingkan serta dibaca sebelumnya.
7. Lakukan proses ini sampai bilangan terakhir pada array tersebut
disisipkan.
2. Tuliskan algoritma pengurutan selection sort secara ascending.?
Algoritma pengurutan selection sort seacara ascending (dari terkecil)
adalah sebagai berikut :
1. Buat sebuah array data bertipe integer yang masih belum terurut.
2. Baca semua indeks dari array tersebut, cari bilangan terkecil dari array
tersebut.
3. Setelah bilangan terkecil ditemukan, saling pindahkan posisi bilangan
terkecil tersebut dengan indeks paling awal.
4. Tandai bahwasanya indeks paling awal sudah diisi dengan benar dan
tidak perlu dipindahkan lagi.
5. Lakukan langkah kedua dan terapkan metode langkah ke-3 kepada
indeks ke-2 dan indeks ke-3, dengan syarat indeks yang sudah terisi
dengan benar tidak perlu di cek lagi.
6. Lakukan proses ini sampai bilangan terakhir pada array tersebut sudah
merupakan bilangan yang paling besar.
B. PERCOBAAN
Percobaan 1 : Mengacak data
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAX 20

int main()
{
int data_awal[MAX],
data_urut[MAX]; int i;
printf("Sebelum pengurutan : \n");
for (i = 0; i < MAX; i++)
{
srand(time(NULL) * (i + 1));
data_awal[i] = rand() % 100 + 1;
printf("%d ", data_awal[i]);
}
printf("\n");
for (i = 0; i < MAX; i++)
data_urut[i] =
data_awal[i];
}

Gambar 10.1 Percobaan mengacak data


Percobaan 2 : Insertion sort secara ascending

#include<stdio.
h>
#include<stdlib
.h> #define MAX
20

void InsertionSort(int arr[])


{
int i, j, key;
for (i = 1; i < MAX; i++)
{
key =
arr[i]; j
= i - 1;
while (j >= 0 && arr[j] > key)
{
arr[j + 1] =
arr[j]; j--;
}
arr[j + 1] = key;
}
}
int main()
{
int data_awal[MAX],
data_urut[MAX]; int i;
long k1, k2;
printf("Sebelum pengurutan : \
n"); for (i = 0; i < MAX; i++)
{
data_awal[i] = rand() % 100
+ 1; printf("%d ",
data_awal[i]);
}
printf("\nSetelah pengurutan : \
n"); for (i = 0; i < MAX; i++)
data_urut[i] =
data_awal[i]; (&k1);
InsertionSort(data_urut);
(&k2);
for (i = 0; i < MAX; i++)
printf("%d ",
data_urut[i]);
printf("\nWaktu = %ld\n", k2 - k1);
}
Gambar 10.2 Percobaan Insertion sort secara ascending
Percobaan 3 : Selection sort secara ascending

#include<stdio.h>
#include<stdlib.h>
#define MAX 20
void SelectionSort(int arr[])
{
int i, j, temp, min, min_id; i
= 0;
while (i < MAX - 1)
{
min_id = i; min
= arr[i];
for (j = i + 1; j < MAX; j++) if
(arr[j] < min)
{
min = arr[j];
min_id = j;
}
temp = arr[min_id];
arr[min_id] = arr[i];
arr[i] = temp;
i++;
}
}
int main()
{
int data_awal[MAX], data_urut[MAX];
int i;
long k1, k2;
printf("Sebelum pengurutan : \n");
for (i = 0; i < MAX; i++)
{
((NULL) * (i + 1));
data_awal[i] = rand() % 100 + 1;
printf("%d ", data_awal[i]);
}
printf("\nSetelah pengurutan : \n");
for (i = 0; i < MAX; i++)
data_urut[i] = data_awal[i];
(&k1);
SelectionSort(data_urut); (&k2);
for (i = 0; i < MAX; i++)
printf("%d ", data_urut[i]);
printf("\nWaktu = %ld\n", k2 - k1);
}
Gambar 10.3 Selection sort secara ascending
C. PRAKTIKUM
1. TUJUAN PRAKTIKUM
Mahasiswa diharapkan mampu:
1. Memahami mengenai algoritma pengurutan insertion sort dan
selection sort.

2. Mampu mengimplementasikan algoritma pengurutan insertion


sort dan selection sort secara ascending dan descending.
2. DASAR TEORI
1. Algoritma Insertion Sort
Salah satu algoritma sorting yang paling sederhana adalah insertion
sort. Algoritma insertion sort pada dasarnya memilah data yang akan
urutkan menjadi 2 bagian, yang belum diurutkan dan yang sudah
diurutkan. Elemen pertama diambil dari bagian array yang belum
diurutkan dan kemudian diletakkan sesuai posisinya pada bagian lain dari
array yang telah diurutkan. Langkah ini dilakukan secara berulang hingga
tak ada lagi elemen tersisa pada bagian array yang belum diurutkan.

Metode insertion sort merupakan metode yang mengurutkan bilangan-


bilangan yang telah terbaca, dan berikutnya secara berulang akan
menyisipkan bilangan-bilangan dalam array yang belum terbaca ke sisi
kiri array yang telah terurut.

Kita mengambil pada bilangan yang paling kiri. Bilangan tersebut


dikatakan urut terhadap dirinya sendiri karena bilangan yang di
bandingkan baru 1.

3 10 4 6 8 9 7 2 1 5

Cek bilangan ke 2 (10) apakah lebih kecil dari bilangan yang ke 1 (3).
Apabila lebih kecil maka ditukar. Tapi kali ini bilangan ke 1 lebih kecil
dari bilangan ke 2 maka tidak ditukar.

3 10 4 6 8 9 7 2 1 5

3 10 4 6 8 9 7 2 1 5

Pada kotak warna abu-abu sudah dalam keadaan terurut. Kemudian


membandingkan lagi pada bilangan selanjutnya yaitu bilangan ke 3 (4).
Bandingkan dengan bilangan yang ada di sebelah kirinya. Pada kasus ini
bilangan ke 2 bergeser dan digantikan bilangan ke 3.

3 10 4 6 8 9 7 2 1 5

3 10 4 6 8 9 7 2 1 5
Lakukan langkah seperti di atas pada bilangan selanjutnya. 4
bilangan pertama sudah dalam keadaan terurut relatif. Ulangi proses
tersebut sampai bilangan terakhir disisipkan.

3 4 10 6 8 9 7 2 1 5

3 4 6 10 8 9 7 2 1 5

3 4 6 8 10 9 7 2 1 5

3 4 6 8 9 10 7 2 1 5

3 4 6 7 8 9 10 2 1 5

2 3 4 6 7 8 9 10 1 5

1 2 3 4 6 7 8 9 10 5

1 2 3 4 5 6 7 8 9 10

2. Algoritma Selection Sort


Ide utama dari algoritma selection sort adalah memilih elemen dengan
nilai paling rendah dan menukar elemen yang terpilih dengan elemen ke-i.
Nilai dari i dimulai dari 1 ke n, dimana n adalah jumlah total elemen
dikurangi 1.

Cek seluruh array dan cari array yang mempunyai nilai terkecil →
index

8 (1). Setelah ditemukan tukar dengan array yang berada di pojok kiri
(3).
3 10 4 6 8 9 7 2 1 5

3 10 4 6 8 9 7 2 1 5
Setelah di tukar bagian yang berwarna abu-abu merupakan index yang
telah terurutkan.

1 10 4 6 8 9 7 2 3 5

Kemudian cari bilangan terkecil selanjutnya (selain di kotak abu-abu)


yaitu bilangan 2 dan tukar dengan sebelah array yang telah terurutkan.

1 10 4 6 8 9 7 2 3 5
1 2 4 6 8 9 7 10 3 5

Dua array sudah terurutkan. Kemudian ulangi langkah di atas dan lakukan
langkah yang sama yaitu pilih terkecil dan tukar dengan sebelah array yang
sudah terurutkan.

1 2 4 6 8 9 7 10 3 5
1 2 3 6 8 9 7 10 4 5

1 2 3 6 8 9 7 10 4 5
1 2 3 4 8 9 7 10 6 5

1 2 3 4 8 9 7 10 6 5
1 2 3 4 5 9 7 10 6 8

1 2 3 4 5 9 7 10 6 8
1 2 3 4 5 6 7 10 9 8

1 2 3 4 5 6 7 10 9 8

1 2 3 4 5 6 7 10 9 8
1 2 3 4 5 6 7 8 9 10

1 2 3 4 5 6 7 8 9 10
3. PEMBAHASAN
Praktikum ini menggunakan Visual Studio Code sebagai Code Editor, g++
sebagai compiler, dan program dijalankan lewat terminal.
Latihan 1

#include <stdio.h>
#include <stdlib.h>
#define MAX 20

AscInsertionSort(int arr[])
{
int i, j, key;
for (i = 1; i < MAX; i++)
{
key = arr[i]; j
= i - 1;
while (j >= 0 && arr[j] > key)
{
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}

DescInsertionSort(int arr[])
{
int i, j, key;
for (i = 1; i < MAX; i++)
{
key = arr[i]; j
= i - 1;
while (j >= 0 && arr[j] < key)
{
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}

int main()
{
int data_awal[MAX], data_urut[MAX];
int i;
system("cls");
printf("Data acak (sebelum pengurutan): \n");

printf(" \n");
printf(" ");
for (i = 0; i < MAX; i++)
{
data_awal[i] = rand() % 100 + 30;
printf(" %d ", data_awal[i]);
}

printf("\n\nData ascending : \n\n");


printf(" ");
for (i = 0; i < MAX; i++)
data_urut[i] = data_awal[i];
AscInsertionSort(data_urut);
for (i = 0; i < MAX; i++)
printf(" %d ", data_urut[i]);

printf("\n\nData descending : \n\n");


printf(" ");
for (i = 0; i < MAX; i++)
data_urut[i] = data_awal[i];
DescInsertionSort(data_urut);
for (i = 0; i < MAX; i++)
printf(" %d ", data_urut[i]);
}

Program ini merupakan program yang berfungsi untuk


menciptakan sekumpulan data berupa angka acak, lalu
mengurutkannya secara ascending dan juga descending dengan
menggunakan penerapan konsep insertion sort
Latihan 2

#include <stdio.h>
#include <stdlib.h>
#define MAX 20

AscSelectionSort(int arr[])
{
int i, j, temp, min, min_id; i
= 0;
while (i < MAX - 1)
{
min_id = i; min
= arr[i];
for (j = i + 1; j < MAX; j++)
if (arr[j] < min)
{
min = arr[j];
min_id = j;
}
temp = arr[min_id];
arr[min_id] = arr[i];
arr[i] = temp;
i++;
}
}

DescSelectionSort(int arr[])
{
int i, j, temp, min, min_id; i
= 0;
while (i < MAX - 1)
{
min_id = i; min
= arr[i];
for (j = i + 1; j < MAX; j++)
if (arr[j] > min)
{
min = arr[j];
min_id = j;
}
temp = arr[min_id];
arr[min_id] = arr[i];
arr[i] = temp;
i++;
}
}
int main()
{
int data_awal[MAX], data_urut[MAX];
int i;

system("cls");
printf(" \n");
printf("Data acak (sebelum pengurutan): \n");
printf(" \n");
printf(" ");
for (i = 0; i < MAX; i++)
{
data_awal[i] = rand() % 100 + 50;
printf(" %d ", data_awal[i]);
}

printf("\n\nData setelah pengurutan ascending : \n\n");


printf(" ");
for (i = 0; i < MAX; i++)
data_urut[i] = data_awal[i];
AscSelectionSort(data_urut);
for (i = 0; i < MAX; i++)
printf(" %d ", data_urut[i]);

printf("\n\nData setelah pengurutan descending : \n\n");


printf(" ");
for (i = 0; i < MAX; i++)
data_urut[i] = data_awal[i];
DescSelectionSort(data_urut);
for (i = 0; i < MAX; i++)
printf(" %d ", data_urut[i]);
}

Program ini merupakan program yang berfungsi untuk menciptakan


sekumpulan data berupa angka acak, lalu mengurutkannya secara ascending
dan juga descending dengan menggunakan penerapan konsep selection sort.
Latihan 3

#include <conio.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>

using namespace std;


AscInsertionSort(int arr[], int max) {
int i, j, key;
for (i = 1; i < max; i++) {
key = arr[i];
j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}

DescInsertionSort(int arr[], int max) {


int i, j, key;
for (i = 1; i < max; i++) {
key = arr[i];
j = i - 1;
while (j >= 0 && arr[j] < key) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}

int main() {

int i, max;

system("cls");
printf("Masukan beberapa data yang ingin dimasukan: \n");
cin >> max;
int data_awal[max], data_urut[max];
printf("\nMasukkan data: \n\n");
for (i = 0; i < max; i++)
{
cin >> data_awal[i];
}

printf(" ");
for (i = 0; i < max; i++)
{
printf(" %d ", data_awal[i]);
}
printf("\n\nData ascending dari kanan ke kiri : \n\n");
printf(" ");
for (i = 0; i < max; i++)
data_urut[i] = data_awal[i];
DescInsertionSort(data_urut, max);
for (i = 0; i < max; i++)
printf(" %d |", data_urut[i]);
printf("\n\nData descending dari kanan ke kiri : \n\n");
printf(" ");
for (i = 0; i < max; i++)
data_urut[i] = data_awal[i];
AscInsertionSort(data_urut, max);
for (i = 0; i < max; i++)
printf(" %d ", data_urut[i]);
getch();
}

Program ini merupakan program yang berfungsi untuk mengurutkan data


yang dimasukkan pengguna secara ascending dan juga descending dari
kanan dengan menggunakan penerapan konsep insertion sort.
Latihan 4

#include <conio.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>

using namespace std;


AscSelectionSort(int arr[], int max) {
int i, j, temp, min, min_id;
i = 0;
while (i < max - 1) {
min_id = i;
min = arr[i];
for (j = i + 1; j < max; j++)
if (arr[j] < min) {
min = arr[j];
min_id = j;
}
temp = arr[min_id];
arr[min_id] = arr[i];
arr[i] = temp;
i++;
}
}

DescSelectionSort(int arr[], int max) {


int i, j, temp, min, min_id;
i = 0;
while (i < max - 1) {
min_id = i;
min = arr[i];
for (j = i + 1; j < max; j++)
if (arr[j] > min) {
min = arr[j];
min_id = j;
}
temp = arr[min_id];
arr[min_id] = arr[i];
arr[i] = temp;
i++;
}
}

int main() {

int i, max;
system("cls");
printf("Masukan beberapa data yang ingin dimasukan: \n");
cin >> max;
int data_awal[max], data_urut[max];
printf("\nMasukkan data: \n\n");
for (i = 0; i < max; i++) {
cin >> data_awal[i];
}
printf(" ");
for (i = 0; i < max; i++) {
printf(" %d ", data_awal[i]);
}

printf("\n\nData setelah pengurutan ascending dari kanan ke


kiri : \n\n");
printf(" ");
for (i = 0; i < max; i++)
data_urut[i] = data_awal[i];
DescSelectionSort(data_urut, max);
for (i = 0; i < max; i++)
printf(" %d ", data_urut[i]);

printf("\n\nData setelah pengurutan descending dari kanan ke


kiri : \n\n");
printf(" ");
for (i = 0; i < max; i++)
data_urut[i] = data_awal[i];
AscSelectionSort(data_urut, max);
for (i = 0; i < max; i++)
printf(" %d ", data_urut[i]);
getch();
}

Program ini merupakan program yang berfungsi untuk mengurutkan data


yang dimasukkan pengguna secara ascending dan juga descending dari
kanan dengan menggunakan penerapan konsep selection sort.
Latihan 5

#include <conio.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Mahasiswa
{
int nim;
char nama[20];
int kelas;
};

struct Mahasiswa data[50];


int j = 0;

using namespace std;

void tambah_data()
{
char jawab[2];
while (1)
{
fflush(stdin);
printf("NIM :");
scanf("%d", &data[j].nim);
printf("Nama :");
scanf("%s", &data[j].nama);
printf("Kelas :");
scanf("%d", &data[j].kelas);
j++;
break;
}
}

void tampil()
{
int i;
printf("Data Mahasiswa yang telah diinputkan :\n");
printf("NIM\tNama\tKelas\n");
for (i = 0; i <= j - 1; i++)
{
printf("%d\t%s\t%d\n", data[i].nim, data[i].nama,
data[i].kelas);
}
}
AscSelectionSort(int arr[], int max)
{
int i, j, temp, min, min_id;
i = 0;
while (i < max - 1)
{
min_id = i;
min = arr[i];
for (j = i + 1; j < max; j++)
if (arr[j] < min)
{
min = arr[j];

min_id = j;
}
temp = arr[min_id];
arr[min_id] = arr[i];
arr[i] = temp;
i++;
}
}

DescSelectionSort(int arr[], int max)


{
int i, j, temp, min, min_id;
i = 0;
while (i < max - 1)
{
min_id = i;
min = arr[i];
for (j = i + 1; j < max; j++)
if (arr[j] > min)
{
min = arr[j];
min_id = j;
}
temp = arr[min_id];
arr[min_id] = arr[i];
arr[i] = temp;
i++;
}
}
}
AscInsertionSort(int arr[], int max)
{
int i, j, key;
for (i = 1; i < max; i++)
{
key = arr[i]; j
= i - 1;
while (j >= 0 && arr[j] > key)
{
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}

DescInsertionSort(int arr[], int max)


{
int i, j, key;
for (i = 1; i < max; i++)
{
key = arr[i]; j
= i - 1;
while (j >= 0 && arr[j] < key)
{
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}

int main()
{

int i, max;

system("cls");
printf("Berapa banyak data yang ingin anda masukkan:");
cin >> max;

int data_awal[max], data_urut[max];


printf("\nMasukkan data mahasiswa: \n\n");
for (i = 0; i < max; i++)
{
tambah_data();
printf("\n");
}
printf(" \n");
tampil();
choose:
int pil;
printf("Silahkan pilih aksi yang ingin anda lakukan
selanjutnya!\n");
printf("1. Ascending Insertion Sort\n");
printf("2. Descending Insertion Sort\n");
printf("3. Ascending Selection Sort\n");
printf("4. Descending Selection Sort\n");
printf("5. Kembali\n");

cin >> pil;

switch (pil)
{
case 1:
system("cls");
{
printf("\nData setelah pengurutan ascending : \n");
for (i = 0; i < max; i++)
data_urut[i] = data[i].nim;
AscInsertionSort(data_urut, max);
printf("NIM\tNama\tKelas\n");

for (i = 0; i <= j - 1; i++)


for (j = 0; j < max; j++)
if (data_urut[i] == data[j].nim)
{
printf("%d\t%s\t%d\n", data[j].nim, data[j].nama,
data[j].kelas);
}
break;
}
case 2:
system("cls");
{
printf("\nData setelah pengurutan descending: \n");
for (i = 0; i < max; i++)
data_urut[i] = data[i].nim;
DescInsertionSort(data_urut, max);
printf("NIM\tNama\tKelas\n");

for (i = 0; i <= j - 1; i++)


for (j = 0; j < max; j++)
if (data_urut[i] == data[j].nim)
{
printf("%d\t%s\t%d\n", data[j].nim, data[j].nama,
data[j].kelas);
}
break;
}
case 3:
system("cls");
{
printf("\nData setelah pengurutan ascending : \n");
for (i = 0; i < max; i++)
data_urut[i] = data[i].nim;
AscSelectionSort(data_urut, max);
printf("NIM\tNama\tKelas\n");

for (i = 0; i <= j - 1; i++)


for (j = 0; j < max; j++)
if (data_urut[i] == data[j].nim)
{
printf("%d\t%s\t%d\n", data[j].nim, data[j].nama,
data[j].kelas);
}
break;
}
case 4:
system("cls");
{

printf("\nData setelah pengurutan descending: \n");


for (i = 0; i < max; i++)
data_urut[i] = data[i].nim;
DescSelectionSort(data_urut, max);
printf("NIM\tNama\tKelas\n");

for (i = 0; i <= j - 1; i++)


for (j = 0; j < max; j++)
if (data_urut[i] == data[j].nim)
{
printf("%d\t%s\t%d\n", data[j].nim, data[j].nama,
data[j].kelas);
}
break;
}
case 5:
system("cls");
{
printf(" Bye ");
exit(0);
}
default:
system("cls");
{
cout << "\n Maaf, Pilihan yang anda pilih tidak ada";
}
getch();
}
goto choose;
}

Program ini merupakan program yang berfungsi untuk mengurutkan data


yang dimasukkan pengguna secara ascending dan juga descending dengan
menggunakan penerapan konsep insertion sort serta selection sort.
Di dalam program ini, pengguna akan diminta untuk memasukkan data
mahasiswa sesuai dengan keinginannya, lalu sistem akan membaca NIM
sebagai patokan pengurutan data.
4. HASIL
Latihan 1

Gambar 10.1 Program Insertion Sort Secara Ascending dan Descending

Latihan 2

Gambar 10.2 Program Selection Sort Secara Ascending dan Descending


Latihan 3

Gambar 10.3 Program Insertion Sort Ascending dan Descending Kanan ke Kiri

Latihan 4

Gambar 10.4 Program Selection Sort Ascending dan Descending Kanan ke Kiri
Latihan 5

Gambar 10.5 Program Pengurut Data Secara Insertion dan Selection Sort
5. KESIMPULAN

Insertion dan Selection Sort merupakan metode yang digunakan untuk


mengurutkan data yang umumnya berupa integer. Perbedaan yang dimiliki oleh
kedua metode ini terletak pada tata cara pengurutannya.

Insertion Sort mencari cara pengurutan melalui indeks yang di selang-


selingkan, sementara Selection Sort mencari pengurutan data dengan membaca
seluruh array dan mengurutkan angka satu per satu. Dari segi efisiensi Insertion
Sort jelas memiliki keunggulan dibandingkan Selection Sort, namun dari segi
kompleksitas program, jelas Selection Sort memiliki keunggulan dibandingkan
Insertion Sort.

Kesimpulannya, Kedua metode ini merupakan metode pengurutan yang


cocok digunakan untuk melakukan sorting pada dataset yang tergolong kecil,
jika digunakan pada data skala besar, maka akan terjadi inefisiensi waktu karena
data harus diurutkan satu demi satu, dan selain banyaknya data, faktor
keterurutan data awal juga mempengaruhi waktu proses pengurutan.
6. LISTING PROGRAM
Latihan 1

#include <stdio.h>
#include <stdlib.h>
#define MAX 20

AscInsertionSort(int arr[])
{
int i, j, key;
for (i = 1; i < MAX; i++)
{
key = arr[i]; j
= i - 1;
while (j >= 0 && arr[j] > key)
{
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}

DescInsertionSort(int arr[])
{
int i, j, key;
for (i = 1; i < MAX; i++)
{
key = arr[i]; j
= i - 1;
while (j >= 0 && arr[j] < key)
{
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}

int main()
{
int data_awal[MAX], data_urut[MAX];
int i;

system("cls");
printf("Data acak (sebelum pengurutan): \n");
printf(" \n");
printf(" ");
for (i = 0; i < MAX; i++)
{
data_awal[i] = rand() % 100 + 30;
printf(" %d ", data_awal[i]);
}

printf("\n\nData ascending : \n\n");


printf(" ");
for (i = 0; i < MAX; i++)
data_urut[i] = data_awal[i];
AscInsertionSort(data_urut);
for (i = 0; i < MAX; i++)
printf(" %d ", data_urut[i]);

printf("\n\nData descending : \n\n");


printf(" ");
for (i = 0; i < MAX; i++)
data_urut[i] = data_awal[i];
DescInsertionSort(data_urut);
for (i = 0; i < MAX; i++)
printf(" %d ", data_urut[i]);
}

Latihan 2
#include <stdio.h>
#include <stdlib.h>
#define MAX 20

AscSelectionSort(int arr[])
{
int i, j, temp, min, min_id; i
= 0;
while (i < MAX - 1)
{
min_id = i; min
= arr[i];
for (j = i + 1; j < MAX; j++)
if (arr[j] < min)
{
min = arr[j];
min_id = j;
}
temp = arr[min_id];
arr[min_id] = arr[i];
arr[i] = temp;
i++;
}
}

DescSelectionSort(int arr[])
{
int i, j, temp, min, min_id; i
= 0;
while (i < MAX - 1)
{
min_id = i; min
= arr[i];
for (j = i + 1; j < MAX; j++)
if (arr[j] > min)
{
min = arr[j];
min_id = j;
}
temp = arr[min_id];
arr[min_id] = arr[i];
arr[i] = temp;
i++;
}
}
int main()
{
int data_awal[MAX], data_urut[MAX];
int i;

system("cls");
printf(" \n");
printf("Data acak (sebelum pengurutan): \n");
printf(" \n");
printf(" ");
for (i = 0; i < MAX; i++)
{
data_awal[i] = rand() % 100 + 50;
printf(" %d ", data_awal[i]);
}

printf("\n\nData setelah pengurutan ascending : \n\n");


printf(" ");
for (i = 0; i < MAX; i++)
data_urut[i] = data_awal[i];
AscSelectionSort(data_urut);
for (i = 0; i < MAX; i++)
printf(" %d ", data_urut[i]);

printf("\n\nData setelah pengurutan descending : \n\n");


printf(" ");
for (i = 0; i < MAX; i++)
data_urut[i] = data_awal[i];
DescSelectionSort(data_urut);
for (i = 0; i < MAX; i++)
printf(" %d ", data_urut[i]);
}

Latihan 3
#include <conio.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>

using namespace std;


AscInsertionSort(int arr[], int max) {
int i, j, key;
for (i = 1; i < max; i++) {
key = arr[i];
j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}

DescInsertionSort(int arr[], int max) {


int i, j, key;
for (i = 1; i < max; i++) {
key = arr[i];
j = i - 1;
while (j >= 0 && arr[j] < key) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}

int main() {

int i, max;

system("cls");
printf("Masukan beberapa data yang ingin dimasukan: \n");
cin >> max;
int data_awal[max], data_urut[max];
printf("\nMasukkan data: \n\n");
for (i = 0; i < max; i++)
{
cin >> data_awal[i];

}
printf(" ");
for (i = 0; i < max; i++)
{
printf(" %d ", data_awal[i]);
}
printf("\n\nData ascending dari kanan ke kiri : \n\n");
printf(" ");
for (i = 0; i < max; i++)
data_urut[i] = data_awal[i];
DescInsertionSort(data_urut, max);
for (i = 0; i < max; i++)
printf(" %d |", data_urut[i]);
printf("\n\nData descending dari kanan ke kiri : \n\n");
printf(" ");
for (i = 0; i < max; i++)
data_urut[i] = data_awal[i];
AscInsertionSort(data_urut, max);
for (i = 0; i < max; i++)
printf(" %d ", data_urut[i]);
getch();
}

Latihan 4
#include<conio.h>
#include<iostrea>
#include<stdio.h>
#include<stdlib.>

using namespace std;


AscSelectionSort(int arr[], int max) {
int i, j, temp, min, min_id;
i = 0;
while (i < max - 1) {
min_id = i;
min = arr[i];
for (j = i + 1; j < max; j++)
if (arr[j] < min) {
min = arr[j];
min_id = j;
}
temp = arr[min_id];
arr[min_id] = arr[i];
arr[i] = temp;
i++;
}
}

DescSelectionSort(int arr[], int max) {


int i, j, temp, min, min_id;
i = 0;
while (i < max - 1) {
min_id = i;
min = arr[i];
for (j = i + 1; j < max; j++)
if (arr[j] > min) {
min = arr[j];
min_id = j;
}
temp = arr[min_id];
arr[min_id] = arr[i];
arr[i] = temp;
i++;
}
}

int main() {

int i, max;
system("cls");
printf("Masukan beberapa data yang ingin dimasukan: \n");
cin >> max;
int data_awal[max], data_urut[max];
printf("\nMasukkan data: \n\n"); for
(i = 0; i < max; i++) {
cin >> data_awal[i];
}
printf(" ");
for (i = 0; i < max; i++) {
printf(" %d ", data_awal[i]);
}

printf("\n\nData setelah pengurutan ascending dari kanan ke


kiri : \n\n");
printf(" ");
for (i = 0; i < max; i++)
data_urut[i] = data_awal[i];
DescSelectionSort(data_urut, max);
for (i = 0; i < max; i++)
printf(" %d ", data_urut[i]);

printf("\n\nData setelah pengurutan descending dari kanan ke


kiri : \n\n");
printf(" ");
for (i = 0; i < max; i++)
data_urut[i] = data_awal[i];
AscSelectionSort(data_urut, max);
for (i = 0; i < max; i++)
printf(" %d ", data_urut[i]);
getch();
}

Latihan 5
#include<conio.h>
#include<iostrea>#inc
lude<stdio.h>
#include<stdlib.>
#includ<string.h>

struct Mahasiswa
{
int nim;
char nama[20];
int kelas;
};

struct Mahasiswa data[50];


int j = 0;

using namespace std;

void tambah_data()
{
char jawab[2];
while (1)
{
fflush(stdin);
printf("NIM :");
scanf("%d", &data[j].nim);
printf("Nama :"); scanf("%s",
&data[j].nama);
printf("Kelas :"); scanf("%d",
&data[j].kelas); j++;
break;
}
}

void tampil()
{
int i;
printf("Data Mahasiswa yang telah diinputkan :\n");
printf("NIM\tNama\tKelas\n");
for (i = 0; i <= j - 1; i++)
{
printf("%d\t%s\t%d\n", data[i].nim, data[i].nama,
data[i].kelas);

}
}
AscSelectionSort(int arr[], int max)
{
int i, j, temp, min, min_id; i
= 0;
while (i < max - 1)
{
min_id = i; min
= arr[i];
for (j = i + 1; j < max; j++)
if (arr[j] < min)
{
min = arr[j];

min_id = j;
}
temp = arr[min_id];
arr[min_id] = arr[i];
arr[i] = temp;
i++;
}
}

DescSelectionSort(int arr[], int max)


{
int i, j, temp, min, min_id; i
= 0;
while (i < max - 1)
{
min_id = i; min
= arr[i];
for (j = i + 1; j < max; j++)
if (arr[j] > min)
{
min = arr[j];
min_id = j;
}
temp = arr[min_id];
arr[min_id] = arr[i];
arr[i] = temp;
i++;
}
}

AscInsertionSort(int arr[], int max)


{
int i, j, key;
for (i = 1; i < max; i++)
{
key = arr[i]; j
= i - 1;
while (j >= 0 && arr[j] > key)
{
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}

DescInsertionSort(int arr[], int max)


{
int i, j, key;
for (i = 1; i < max; i++)
{
key = arr[i]; j
= i - 1;
while (j >= 0 && arr[j] < key)
{
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}

int main()
{

int i, max;

system("cls");
printf("Berapa banyak data yang ingin anda masukkan:");
cin >> max;

int data_awal[max], data_urut[max];


printf("\nMasukkan data mahasiswa: \n\n");
for (i = 0; i < max; i++)
{
tambah_data();

printf("\n");
}
printf(" \n");
tampil();
choose:
int pil;
printf("Silahkan pilih aksi yang ingin anda lakukan
selanjutnya!\n");
printf("1. Ascending Insertion Sort\n");
printf("2. Descending Insertion Sort\n");
printf("3. Ascending Selection Sort\n");
printf("4. Descending Selection Sort\n");
printf("5. Kembali\n");

cin >> pil;

switch (pil)
{
case 1:
system("cls");
{
printf("\nData setelah pengurutan ascending : \n");
for (i = 0; i < max; i++)
data_urut[i] = data[i].nim;
AscInsertionSort(data_urut, max);
printf("NIM\tNama\tKelas\n");

for (i = 0; i <= j - 1; i++)


for (j = 0; j < max; j++)
if (data_urut[i] == data[j].nim)
{
printf("%d\t%s\t%d\n", data[j].nim, data[j].nama,
data[j].kelas);
}
break;
}
case 2:
system("cls");
{
printf("\nData setelah pengurutan descending: \n");
for (i = 0; i < max; i++)
data_urut[i] = data[i].nim;
DescInsertionSort(data_urut, max);
printf("NIM\tNama\tKelas\n");

for (i = 0; i <= j - 1; i++)

for (j = 0; j < max; j++)


if (data_urut[i] == data[j].nim)
{
printf("%d\t%s\t%d\n", data[j].nim, data[j].nama,
data[j].kelas);
}
break;
}
case 3:
system("cls");
{
printf("\nData setelah pengurutan ascending : \n");
for (i = 0; i < max; i++)
data_urut[i] = data[i].nim;
AscSelectionSort(data_urut, max);
printf("NIM\tNama\tKelas\n");

for (i = 0; i <= j - 1; i++)


for (j = 0; j < max; j++)
if (data_urut[i] == data[j].nim)
{
printf("%d\t%s\t%d\n", data[j].nim, data[j].nama,
data[j].kelas);
}
break;
}
case 4:
system("cls");
{

printf("\nData setelah pengurutan descending: \n");


for (i = 0; i < max; i++)
data_urut[i] = data[i].nim;
DescSelectionSort(data_urut, max);
printf("NIM\tNama\tKelas\n");

for (i = 0; i <= j - 1; i++)


for (j = 0; j < max; j++)
if (data_urut[i] == data[j].nim)
{
printf("%d\t%s\t%d\n", data[j].nim, data[j].nama,
data[j].kelas);
}
break;
}
case 5:

system("cls");
{
printf(" Bye ");
exit(0);
}
default:
system("cls");
{
cout << "\n Maaf, Pilihan yang anda pilih tidak ada";
}
getch();
}
goto choose;
}

Anda mungkin juga menyukai