Anda di halaman 1dari 8

Nama Jhona Simanjuntak

Kelas : TI 1 A

Nim : 2022573010091

Matakuliah : Struktur Data dan Algoritma


Hari /Tanggal : Selasa, 09 Mei 2023
Lama Ujian : 150 Menit
Sifat Ujian : Buka Buku dan Laptop
Dosen : Hendrawaty, ST., MT.

SOAL UTS ( nomor 1 dan 2 )

1. Diketahui suatu array yang elemennya masih teracak a{6} = 40, 60, 30, 50, 10, 20 , Buatlah
program untuk melakukan pengurutan secara menaik (ascending) terhadap array
tersebut menggunakan algoritma merge sort.

Program :
#include <stdio.h>

void merge(int arr[], int l, int m, int r) {


int i, j, k;
int n1 = m - l + 1;
int n2 = r - m;

int L[n1], R[n2];

for (i = 0; i < n1; i++) {


L[i] = arr[l + i];
}

for (j = 0; j < n2; j++) {


R[j] = arr[m + 1 + j];
}

i = 0;
j = 0;
k = l;

while (i < n1 && j < n2) {


if (L[i] <= R[j]) {
arr[k] = L[i];
i++;
} else {
arr[k] = R[j];
j++;
}
k++;
}

while (i < n1) {


arr[k] = L[i];
i++;
k++;
}

while (j < n2) {


arr[k] = R[j];
j++;
k++;
}
}

void merge_sort(int arr[], int l, int r) {


if (l < r) {
int m = l + (r - l) / 2;

merge_sort(arr, l, m);
merge_sort(arr, m + 1, r);

merge(arr, l, m, r);
}
}

void print_array(int arr[], int size) {


int i;
for (i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}

int main() {
int a[] = {40, 60, 30, 50, 10, 20};
int n = sizeof(a) / sizeof(a[0]);

printf("Array ebelum diurutkan: \n");


print_array(a, n);

merge_sort(a, 0, n - 1);
printf("Array setelah diurutkan: \n");
print_array(a, n);

return 0;
}

Output :

2. Diketahui suatu array yang elemennya masih teracak a{6} = 30, 20, 10, 50, 60, 40 , Buatlah
program untuk melakukan pengurutan secara menaik (ascending) terhadap array tersebut
menggunakan algoritma quick sort.

Program :
#include <stdio.h>

void swap(int *a, int *b) {


int temp = *a;
*a = *b;
*b = temp;
}

int partition(int arr[], int low, int high) {


int pivot = arr[high];
int i = low - 1;

for (int j = low; j <= high - 1; j++) {


if (arr[j] < pivot) {
i++;
swap(&arr[i], &arr[j]);
}
}

swap(&arr[i + 1], &arr[high]);


return (i + 1);
}

void quick_sort(int arr[], int low, int high) {


if (low < high) {
int pi = partition(arr, low, high);

quick_sort(arr, low, pi - 1);


quick_sort(arr, pi + 1, high);
}
}

void print_array(int arr[], int size) {


for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}

int main() {
int a[] = {30, 20, 10, 50, 60, 40};
int n = sizeof(a) / sizeof(a[0]);

printf("Array sebelum diurutkan: ");


print_array(a, n);

quick_sort(a, 0, n - 1);

printf("Array setelah diurutkan: ");


print_array(a, n);

return 0;
}

Output :
SOAL KUIS ( nomor 3 dan 4 )
3. Diketahui suatu array a[ ] = {40, 60, 30, 50, 10, 20} , Buatlah program untuk mencari data
pada Array tersebut, tampilkan pesan “data ditemukan” jika data yang dicari tersebut ada,
dan tampilkan pesan “data tidak ditemukan” jika data yg dicari tidak ada pada Array
tersebut. Gunakan algoritma Binary search dan Algoritma bubble sort pada soal ini.

Program :
#include <stdio.h>

// Fungsi untuk melakukan bubble sort pada array


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

// Fungsi untuk melakukan binary search pada array


int binarySearch(int arr[], int l, int r, int x)
{
if (r >= l)
{
int mid = l + (r - l) / 2;

if (arr[mid] == x)
return mid;

if (arr[mid] > x)
return binarySearch(arr, l, mid - 1, x);

return binarySearch(arr, mid + 1, r, x);


}

return -1;
}

int main()
{
int arr[] = {40, 60, 30, 50, 10, 20};
int n = sizeof(arr) / sizeof(arr[0]);

// Melakukan bubble sort pada array


bubbleSort(arr, n);

// Mencari data pada array menggunakan binary search


int x = 50;
int result = binarySearch(arr, 0, n-1, x);

// Menampilkan hasil pencarian


if (result == -1)
printf("Data tidak ditemukan\n");
else
printf("Data ditemukan pada indeks ke-%d\n", result);

return 0;
}

Output :
4. Diketahui suatu array a[ ] = {40, 60, 50, 10, 20} , Buatlah program untuk mencari nilai 30
pada Array tersebut, tampilkan pesan “data tidak ditemukan” jika data tersebut tidak ada
pada array. kemudian insert nilai 30 kedalam array tersebut pada indek2. kemudian ulangi
pencarian nilai 30 pada array tersebut. Dan tampilkan pesan “data ditemukan, data berada
pada indeks 2” ( jika data yang dicari tersebut ada}. Gunakan algoritma linear search pada
soal ini. Elemen pada array di inputkan saat program berjalan ( lewat keyboard), demikian
juga nilai yang ingin dicari dan nilai yang ingin di insert.

Program :

#include <stdio.h>

// Fungsi untuk melakukan bubble sort pada array


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

// Fungsi untuk melakukan binary search pada array


int binarySearch(int arr[], int l, int r, int x)
{
if (r >= l)
{
int mid = l + (r - l) / 2;

if (arr[mid] == x)
return mid;

if (arr[mid] > x)
return binarySearch(arr, l, mid - 1, x);

return binarySearch(arr, mid + 1, r, x);


}

return -1;
}

int main()
{
int arr[] = {40, 60, 30, 50, 10, 20};
int n = sizeof(arr) / sizeof(arr[0]);

// Melakukan bubble sort pada array


bubbleSort(arr, n);

// Mencari data pada array menggunakan binary search


int x = 50;
int result = binarySearch(arr, 0, n-1, x);

// Menampilkan hasil pencarian


if (result == -1)
printf("Data tidak ditemukan\n");
else
printf("Data ditemukan pada indeks ke-%d\n", result);

return 0;
}

Output :

Anda mungkin juga menyukai