Created
April 12, 2024 01:34
-
-
Save w33ladalah/847c115dfe95c152b47fce497b50573d to your computer and use it in GitHub Desktop.
Program sederhana yang merupakan implementasi dari bubble sort, selection sort, sequential search, dan binary search.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
// Buat structure untuk mahasiswa | |
struct Mahasiswa { | |
char const *nim; // NIM dengan tipe char | |
char const *nama; // Nama dengan tipe char | |
int nilai; // Nilai dengan tipe integer | |
}; | |
// Bubble sort | |
// ====================================================================================== | |
void bubbleSort(struct Mahasiswa array[], int size, char const *sort) { | |
for (int step = 0; step < size - 1; ++step) { | |
for (int i = 0; i < size - step - 1; ++i) { | |
if (sort == "ASCENDING") { | |
if (array[i].nilai > array[i + 1].nilai) { | |
struct Mahasiswa temp = array[i]; | |
array[i] = array[i + 1]; | |
array[i + 1] = temp; | |
} | |
} else { | |
if (array[i].nilai < array[i + 1].nilai) { | |
struct Mahasiswa temp = array[i]; | |
array[i] = array[i + 1]; | |
array[i + 1] = temp; | |
} | |
} | |
} | |
} | |
} | |
// Selection sort | |
// ====================================================================================== | |
// Fungsi untuk menukar posisi dari dua nilai yang diurutkan | |
void swap(int *xp, int *yp) { | |
int temp = *xp; | |
*xp = *yp; | |
*yp = temp; | |
} | |
void selectionSort(struct Mahasiswa arr[], int n, char const *sort) { | |
int i, j, minIndex; | |
for (i = 0; i < n-1; i++) { | |
minIndex = i; | |
for (j = i+1; j < n; j++) { | |
if (sort == "ASCENDING") { | |
if (arr[j].nilai < arr[minIndex].nilai) { | |
minIndex = j; | |
} | |
} else { | |
if (arr[j].nilai > arr[minIndex].nilai) { | |
minIndex = j; | |
} | |
} | |
} | |
swap(&arr[minIndex].nilai, &arr[i].nilai); | |
} | |
} | |
// Sequential search | |
// ====================================================================================== | |
int sequentialSearch(struct Mahasiswa arr[], int size, int search) { | |
for (int i = 0; i < size; i++) { | |
if (arr[i].nilai == search) { | |
return i; | |
} | |
} | |
return -1; | |
} | |
// Binary search | |
// ====================================================================================== | |
int binarySearch(struct Mahasiswa arr[], int lIndex, int rIndex, int search) { | |
while (lIndex <= rIndex) { | |
int m = lIndex + (rIndex - lIndex) / 2; | |
// cek apakah nilai search ada di tengah | |
if (arr[m].nilai == search) { | |
return m; | |
} | |
// jika search lebih besar, abaikan separuh kiri dari array dan cari di bagian kanan | |
if (arr[m].nilai < search) { | |
lIndex = m + 1; | |
} | |
// jika search lebih kecil, abaikan separuh kanan dari array dan cari di bagian kiri | |
else { | |
rIndex = m - 1; | |
} | |
} | |
return -1; | |
} | |
// Fungsi untuk menampilkan data dari proses sorting | |
// ======================================================================================= | |
void tampilkanDataMahasiswa(struct Mahasiswa array[], int size) { | |
printf("NIM "); | |
printf("Nama "); | |
printf("Nilai \n"); | |
for (int i = 0; i < size; ++i) { | |
printf("%s ", array[i].nim); | |
printf("%s ", array[i].nama); | |
printf("%d \n", array[i].nilai); | |
} | |
printf("\n"); | |
} | |
// Fungsi utama yang akan dijalankan oleh program | |
int main() { | |
struct Mahasiswa students[] = { | |
{"10523001", "Asep", 45}, | |
{"10523002", "Budi", 67}, | |
{"10523003", "Cepi", 80}, | |
{"10523004", "Dadang", 78}, | |
{"10523005", "Ester", 90}, | |
{"10523006", "Franky", 95}, | |
{"10523007", "Gunawan", 25}, | |
{"10523008", "Hendrawan", 40}, | |
{"10523009", "Intan", 87}, | |
{"10523010", "Jepri", 75}, | |
{"10523011", "Kurniawan", 82}, | |
{"10523012", "Lucky", 63}, | |
{"10523013", "Mandra", 57}, | |
{"10523014", "Nono", 92}, | |
{"10523015", "Ogi", 68} | |
}; | |
int size = sizeof(students) / sizeof(students[0]); | |
// Bubble sort | |
printf("=== BUBBLE SORT ===\n"); | |
printf("Tampilkan BUBBLE SORT secara ASCENDING:\n"); | |
bubbleSort(students, size, "ASCENDING"); | |
tampilkanDataMahasiswa(students, size); | |
printf("Tampilkan BUBBLE SORT secara DESCENDING:\n"); | |
bubbleSort(students, size, "DESCENDING"); | |
tampilkanDataMahasiswa(students, size); | |
printf("\n"); | |
// Selection sort | |
printf("=== SELECTION SORT ===\n"); | |
printf("Tampilkan SELECTION SORT secara ASCENDING:\n"); | |
selectionSort(students, size, "ASCENDING"); | |
tampilkanDataMahasiswa(students, size); | |
printf("Tampilkan SELECTION SORT secara DESCENDING:\n"); | |
selectionSort(students, size, "DESCENDING"); | |
tampilkanDataMahasiswa(students, size); | |
// Definisikan variable untuk menyimpan nilai yang akan dicari dari inputan program | |
int search; | |
// Sequential search | |
printf("=== SEQUENATIAL SEARCH ===\n"); | |
printf("Nilai Ujian yang dicari : "); | |
scanf("%d", &search); | |
int resultIndex = sequentialSearch(students, size, search); | |
if (resultIndex > -1) { | |
struct Mahasiswa result = students[resultIndex]; | |
printf("Nilai Ujian %d dimiliki atas Nama %s dengan NIM %s \n", result.nilai, result.nama, result.nim); | |
} | |
printf("\n"); | |
// Binary search | |
printf("=== BINARY SEARCH ===\n"); | |
printf("Nilai Ujian yang dicari : "); | |
scanf("%d", &search); | |
bubbleSort(students, size, "ASCENDING"); | |
resultIndex = binarySearch(students, 0, size, search); | |
if (resultIndex > -1) { | |
struct Mahasiswa result = students[resultIndex]; | |
printf("Nilai Ujian %d dimiliki atas Nama %s dengan NIM %s \n", result.nilai, result.nama, result.nim); | |
} | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment