top of page
Writer's pictureD A Rosi Arsida Wardani

Linear & Binary Search | Workshop 8

Updated: Jun 15, 2021

Linear Search Mencari NIM

Analisis

NIM sebagai kunci akan dibandingkan dengan data lain hingga data terakhir dalam array (terjadi perulangan). Apabila posisi ke-i data sama dengan kunci yang diberikan, maka disitulah letak index. Pernyataan tersebut dalam bahasa algoritmik dapat ditulis :


if (array [i] = nim) then ketemu ← true end if

Namun, apabila data tidak ditemukan, maka kunci tidak ada dalam array data. Pernyataan tersebut dalam bahasa algoritmik dapat ditulis :


if (ketemu = false) then write ("data tidak ditemukan") end if

Algoritma linear

function cari_linear (input array : larik; n, nim : integer) : void

Deklarasi

ketemu : boolean

i : integer

Deskripsi

ketemu ← false

for i ← 0 to n do

if (array [i] = nim) then

ketemu ← true

end if

end for

if (ketemu = false) then

write("data tidak ditemukan")

end if


Program C++

#include<iostream>
using namespace std;
void cari_linier(int array[], int n, int nim)
{
    bool ketemu = false;
    cout<<nim<<" ada di index ";
    for(int i=0;i<n;i++){
        if (array[i] == nim)
        cout<<i<<"\t";
        ketemu = true;
    }
    if(ketemu==false){
        cout<<"data tidak ditemukan";
    }
}

int main()
{
    int n,i,nim;
    cout<<"masukkan jumlah nim yang akan dicari\n";
    cin>>n;
    int array[n];
    cout<<"masukkan beberapa nim\n";
    for(i=0;i<n;i++){
        cin>>array[i];
    }
    cout<<"masukkan 2 digit nim terakhir\n";
    cin>>nim;
    cari_linier (array, n, nim);
    return 0;
}

Hasil run :


 


Binary Search Mencari Nama

Analisis

Nama sebagai kunci akan dibandingkan dengan data nama lainnya. Apabila kunci tersebut sama dengan titik tengah, maka tidak dilakukan lagi pencarian. Pernyataan di atas dapat ditulis :

strcmp (nama, x[tengah])==0

strcmp merupakan fungsi yang digunakan untuk membandingkan string satu dengan string lainnya. Oleh karena string yang dibandingkan sama, maka menghasilkan nilai 0.

Atau bisa juga ditulis dengan bahasa algoritmik sebagai :

nama = x[tengah]

Rumus titik tengah :

tengah = (bawah + atas) / 2

Apabila tidak sama , maka string akan dibandingkan lagi dengan data disebelah kiri (data lebih kecil dari data ditengah) dan kanan (data lebih besar dari data ditengah). Syntax dari pernyataan tersebut yaitu :

Jika dibandingkan ke kanan :

strcmp (nama, x[tengah]) > 0

atau ditulis dalam bahasa algoritmik :

nama > x[tengah]

Oleh karena data akan dicari lagi kesebelah kanan, maka :

bawah = tengah + 1

Apabila data dicari lagi kesebelah kiri, maka :

atas = tengah - 1

Algoritma binary

function cari_binary (input x, nama : larik; n : integer) : integer

Deklarasi

bawah, atas, tengah : integer

Deskripsi

bawah ← 0

atas ← n-1

while (bawah <= atas) do

tengah ← (bawah + atas) / 2

if (nama = x[tengah]) then

cari_binary ← tengah

else if (nama > x[tengah]) then

bawah ← tengah + 1

else

atas ← tengah - 1

end if

end while

cari_binary ← -1


Program C++

#include<iostream>
#include <string.h>
using namespace std;
int cari_binary(char x[50][50], char nama[20], int n){
	int bawah,atas,tengah;
	bawah=0;
 	atas=n-1;
 	while(bawah<=atas){
 		tengah=(bawah+atas)/2;
 		if (strcmp(nama,x[tengah])==0){
		 	return tengah;
		}
 		else if(strcmp(nama,x[tengah])>0){
 			bawah=tengah+1;
 		}else{
 			atas=tengah-1;
	 	}
	}
 	return -1;
}

 int main(){
 	int i,n;
 	char x[50][50],nama[20];
 	cout<<"masukkan jumlah siswa\n";
	cin>>n;
	cout<<"masukkan nama-nama\n";
	for(int i=0; i<n; i++){
		cin>>x[i];	
	}
 	cout<<"masukkan nama yang akan dicari\n";
    cin>>nama;
    int hasil = cari_binary(x, nama, n);;
   	if(hasil == -1)
    	cout<<"data tidak dotemukan";
    else
    	cout<<"ada di index "<<hasil;
 	
 }

Hasil run :



Recent Posts

See All

One-dimensional Arrays

One-dimensional arrays are data structures that contain data types of the same type. In the form of a group of related memories...

Loop

Introduction Examples of algorithms in everyday life : Example 1 : To finish eating a plate of rice (initial conditions) Mouthfuls of a...

Subprogram dan Rekursi

metode : divide & conquer (dibagi-bagi menjadi bagian yang lebih kecil, lalu selesaikan masalah yang dihadapi) Prosedur Prosedur...

Comentarios


Post: Blog2_Post
bottom of page