# Tugas Pendahuluan Modul 6 - Searching
```
Nama : Hasan Abdullah Azzam
NPM : 2406428314
```
> Note: Soal Programming tidak perlu dicantumkan referensi, hanya soal Teori saja yang perlu referensi minimal 2.
## Teori
### 1. Jelaskan apa itu searching, jenis-jenisnya, cara kerjanya, dan pengaplikasiannya! <span style="color:red;">(30 Poin)</span>
---
seraching merupakkan suatu tool dalam pemograman yang memungkinkan kita mencari suatu nilai spesific darui kumpulan data, tujua utamanya adalah menemukkan lokasi dari suatu target yang diinginkan.
ada 2 jenis metode yang umum digunakkan yaitu:
- linier search:
metode ini memeriksa setiap elemen dan mengeceknya apakah cocok dengan target yang diinginkan, karen amemerlukkan pengecekkan satu satu nilai komplesitas waktunya sebesar O(n).
kelebihan dari metode ini adalah keserhanaanya dalam implementasu dan lebih flexibel, karena data yang dicari tidak harus berurutan.
metode ini cocok untuk mencari dari sutau kumpulan data tidak berururtn, data linkedlist, data yang jumlahnya tidak cukup besar.
- binary search:
metode ini secara berulang membagi rentang uji manjadi dua dan mengupdatenya sesuai kondisi nilai target, ide dari metode ini adalah pengurangan rentang uji sehingga waktu proses semakin cepaat, dengan penerapan metode ini, besar kompleksitas akan berkurang menjadi O(log n)
kelebihan metode binary serach adalah lebih cepat dan efesiensi waktu dari pdaa pencarian biasa(linier search), namun metode ini hanya dapat digunakkan jika data uji sedah dalam kondisi terururt.
pengaplikasian:
- fitur pencarian dalam aplikasi.
- mencari data disuatu database.
### Referensi:
- GeeksforGeeks, “Searching Algorithms - GeeksforGeeks,” GeeksforGeeks, 2017. https://www.geeksforgeeks.org/searching-algorithms/ [Diakses: 17-Maret-2025]
- GeeksforGeeks, “Linear Search - GeeksforGeeks,” GeeksforGeeks, Jul. 05, 2024. https://www.geeksforgeeks.org/linear-search/ [Diakses: 17-Maret-2025]
- GeeksforGeeks, “Binary Search - GeeksforGeeks,” GeeksforGeeks, Apr. 2019. https://www.geeksforgeeks.org/binary-search/ [Diakses: 17-Maret-2025]
- Modul 4 algoritma pemograman - Searching
---
### 2. Terdapat sebuah data nilai ujian kalkulus yang telah terurut sebagai berikut:
`77 78 83 83 90 98 100`
### Anda diminta untuk membuat program yang akan mencari ada di index ke berapa mahasiswa yang mendapatkan nilai 98. Buatlah dan jelaskan ilustrasi untuk menggambarkan skenario tersebut menggunakan algoritma selain linear search! <span style="color:red;">(30 Poin)</span>
Contoh gambar ilustrasi:

### Jawab

- diawal kita menentukkan target pencarian di suatu array.dalam contoh kasus angka yang dicaria dalah 98
- ambil indeks tengah dari array uji, `m = 3`.
- cek apakah nilai di indeks 3 sesuai dengan target, jika seuai return indeks tersebut, jika tidak cek apakah lebih besar atau lebih kecil.
- `98 > 83`(nilai di indeks 3) karena lebih besar update indeks `low` menjadi `middle + 1`. jika kurang dari, update nilai `high` menjadi `middle - 1`.
- balik ke langkah 2 dan ulangi terus sampai ketemu.
- jika sudah mencapai nilai `low = high` dan belum menemukkan target, return `-1` atau target tidak ditemukkan
### Referensi:
- GeeksforGeeks, “Binary Search - GeeksforGeeks,” GeeksforGeeks, Apr. 2019. https://www.geeksforgeeks.org/binary-search/ . [Diakses: 17-Maret-2025]
- Modul 4 algoritma pemograman - Searching
---
## Programming
### Realisasikan skenario ini dalam program bahasa C. Berikan juga analisa terhadap kode yang telah dibuat! <span style="color:red;">(40 Poin)</span>
---
Code Kalian :
```c
#include<stdio.h>
int binarySearch(int arr[], int l, int h, int target){ // fungsi untuk melakukkan binary search
int middle,hasil;
while(l <= h){
middle = (l + h)/2;
if(arr[middle] == target){
break;
}
if(arr[middle] < target){
l = middle + 1;
}else{
h = middle - 1;
}
}
if(l > h){
hasil = -1;
printf("angka %d tidak ditemukan\n",target);
}else{
hasil = middle;
printf("angka %d ditemukan di indeks ke-%d\n",target,hasil);
}
return hasil;
}
int main(){
int arr[] = {77, 78, 83, 83, 90, 98, 100};
int size = sizeof(arr)/sizeof(arr[0]); //menentukkan ukuran array
int target = 98; //target pencarian
int hasil = binarySearch(arr,0, size-1,target);
return 0;
}
```
SS Output Program Kalian :


**Analisa** :
- fungsi `binarySearch` dengan 4 parameter :`arr[]` array penyimpan data uji, `l` nilai indeks low, `h` nilai indeks high, `target`, nilai yang ingin dicari.
- didalam fungsi inisialisasi data middle dan hasil.
- selanjutnya, melakukkan iterasi selama kondisi terpebuhi yaitu `l <= h`
- didalam while, cek target dan middle apakah sama atau beda, jika sama `break` fungsi while jika tidak, update low atau high sesuai syarat kriteria`arr[middle] < target`
- setelah loop, cek kondisi low dan high, jika `l > h` return -1 terget tidak ditemukkan, jika tidak return indeks saat ini yaitu var middle.