STRUKTUR DATA
Modul Praktikum 10
Disusun oleh:
NIM : 2107110677
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];
}
#include<stdio.
h>
#include<stdlib
.h> #define MAX
20
#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.
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
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
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
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]);
}
#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]);
}
#include <conio.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
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();
}
#include <conio.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
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]);
}
#include <conio.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Mahasiswa
{
int nim;
char nama[20];
int kelas;
};
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++;
}
}
int main()
{
int i, max;
system("cls");
printf("Berapa banyak data yang ingin anda masukkan:");
cin >> max;
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");
Latihan 2
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
#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]);
}
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]);
}
Latihan 3
#include <conio.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
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.>
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]);
}
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;
};
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++;
}
}
int main()
{
int i, max;
system("cls");
printf("Berapa banyak data yang ingin anda masukkan:");
cin >> max;
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");
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");
system("cls");
{
printf(" Bye ");
exit(0);
}
default:
system("cls");
{
cout << "\n Maaf, Pilihan yang anda pilih tidak ada";
}
getch();
}
goto choose;
}