Modul 9: Sequential & Binary Search - fzl-22/modul-alpro-informatika GitHub Wiki

Searching Algorithm

Searching algorithm atau algoritma pencarian merupakan algoritma yang digunakan untuk mencari sebuah item dalam sebuah kumpulan data. Terdapat banyak jenis algoritma pencarian seperti sequential searching, binary searching, jump searching, interpolation searching, dan banyak lagi.

Sequential Searching

Sequential searching atau biasa disebut linear searching merupakan algoritma pencarian dasar yang melakuan pencarian item di dalam data dengan bentuj baris atau list. Pencarian menggunakan sequential searching sangat mudah yaitu dilakukan dengan memeriksa satu per satu data secara berurutan untuk memastikan kecocokan antara tiap-tiap data dengan data yang dicari. Data-data yang dicari dapat beraneka ragam, menyesuaikan dari kebutuhan program.

Berikut merupakan ilustrasi dari sequential searching :

Kelebihan dari algoritma ini adalah sangat mudah diimplementasikan, namun algoritma ini juga memiliki kelemahan yaitu membutuhkan waktu pemrosesan yang besar ketika data yang dicari terdapat di dalam kumpulan data yang sangat besar.

Berikut merupakan contoh kode program Sequential Search :

#include <stdio.h>

int sequentialSearch(int cari, int*arr, int arrLength){

    for(int i = 0; i < arrLength; i++){
        if(cari == arr[i] && i != arrLength) return i;
    }
    return -1;
}

int main()
{

    int barisAngka[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int arrLength = sizeof(barisAngka)/sizeof(int);
    int cari;

    printf("Masukkan angka yang dicari: ");
    scanf("%d", &cari);

    int resultIndex = sequentialSearch(cari, barisAngka, arrLength);
    if(resultIndex == -1) printf("Angka tidak ditemukan\n");
    else printf("Angka %d ada di index %d\n", cari, resultIndex);

    return 0;
}

Binary Search

Binary Search merupakan sebuah algoritma pencarian untuk mencari nilai tertentu dalam sebuah array linear, dengan cara menghilangkan setengah porsi array pada setiap pengulangannya.

Cara Kerja Binary Search :

  1. Dimulai dari index tengah dari sebuah array sebagai Search Key, low sebagai batas kiri, dan high sebagai batas kanan. gambar 1
  2. Jika nilai dari Search Key sama dengan nilai yang dicari, maka kembalikan nilai Search Key.
  3. Atau jika nilai yang dicari lebih kecil dari Search Key, maka persempit area pencarian ke bagian bawah dengan memindahkan high kesisi kiri Search Key. gambar 1
  4. Sebaliknya jika nilai yang dicari lebih besar dari Search Key, maka persempit area pencarian ke bagian atas dengan memindahkan low kesisi kanan Search Key. gambar 1
  5. Periksa berulang kali dari poin nomor dua hingga nilainya ditemukan atau intervalnya kosong.

Contoh implementasi Binary Search dalam bahasa C

#include <stdio.h>

int binarySearch(int cari, int *arr, int right)
{
    int left = 0;
    while (left <= right)
    {
        int mid = (left + right) / 2;
        printf("awal[%d],tengah[%d],akhir[%d]\n", left, mid, right);
        if (cari == arr[mid])
            return mid;
        if (cari > arr[mid])
            left = mid + 1;
        else
            right = mid - 1;
    }
    return -1;
}

int main()
{
    int barisAngka[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int arrLength = sizeof(barisAngka) / sizeof(int);
    int cari;

    printf("Masukkan angka yang dicari: ");
    scanf("%d", &cari);

    int resultIndex = binarySearch(cari, barisAngka, arrLength - 1);
    if (resultIndex == -1)
        printf("Angka tidak ditemukan\n");
    else
        printf("Angka %d ada di index %d\n", cari, resultIndex);

    return 0;
}

Sequential Search vs Binary Search

Soal Latihan

  1. Buatlah array 2 dimensi dengan ukuran 3x3 dan lakukan pencarian terhadap suatu angka di dalam array 2 dimensi tersebut. Jika angka ditemukan, outputkan baris dan kolom dari angka tersebut dan jika tidak, maka outputkan angka tidak ditemukan.

    Input :

    5
    

    Output :

    Angka 5 berada pada baris ke 0 kolom ke 2.
    
  2. Buatlah program untuk menghitung jumlah setiap huruf dari sebuah kalimat

    Input :

    "apa kabar semuanya, apakah semuanya baik baik saja";
    

    Output :

    huruf a ada 15
    huruf b ada 3
    huruf e ada 2
    huruf h ada 1
    huruf i ada 2
    huruf j ada 1
    huruf k ada 4
    huruf m ada 2
    huruf n ada 2
    huruf p ada 2
    huruf r ada 1
    huruf s ada 3
    huruf u ada 2
    huruf y ada 2
    
  3. Buatlah Sequential Algoritm dengan menggunakan while looping.

⚠️ **GitHub.com Fallback** ⚠️