Skip to content

Instantly share code, notes, and snippets.

@w33ladalah
Created April 12, 2024 01:34
Show Gist options
  • Save w33ladalah/847c115dfe95c152b47fce497b50573d to your computer and use it in GitHub Desktop.
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.
#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