Disusun Oleh:
Pencarian atau searching suatu data pada sekumpulan data merupakan proses yang sangat
penting. Proses pencarian dilakukan untuk mengetahui apakah data yang dicari terdapat pada
sekumpulan data yang ada. Selain untuk mengetahui keberadaan data, informasi yang lain
yang bisa didapat adalah letak dari data tersebut. Adapun jenis pencarian yaitu:
Sequential Search dapat dilakukan pada data yang belum terurut mau pun
yang sudah terurut.Pencarian dilakukan dengan melakukan penelurusan data satu-
persatu kemudian dicocokan dengan data yang dicari, jika tidak sama maka
penelusuran dilanjutkan, jika sama maka penelurusan dihentikan, berarti data telah
ditemukan.
Langkah pencarian:
Pencarian bagi dua atau pencarian biner, hanya dapat dilakukan pada data
yang sudah terurut. Bila data belum terurut dan akan dilakukan pencarian
menggunakan metode ini maka terlebih dahulu harus diurutkan. Untuk data yang
besar metode ini lebih efektif dibandingkan dengan metode pencarian beruntun
(sequential search).
Langkah pencarian:
Aplikasi Searching
1. Sequential Search
#include <stdio.h>
#include <stdlib.h>
main(){
int tabInt[10]={24,17,18,15,22,26, 13,21, 16, 28};
int ketemu;
int cariData;
int i;
printf("Masukkan data yang dicari = ");
scanf("%d",&cariData);
i=0;
ketemu=0;
while (i<10 && ketemu!=1){
if (tabInt[i]==cariData){
ketemu=1;
}else{
i++;
}
}
if(ketemu==1){
printf("Data %d terdapat pada kumpulan data\n",cariData );
}else{
printf("Data %d tidak terdapat pada kumpulan data\n",cariData );
}
}
2. Binary Search
#include <stdio.h>
#include <stdlib.h>
int main(){
int tabInt[10] = {12,23,29,34,56,60,67,78,84,99};
int i,j,k;
int cariData,ketemu;
printf("Masukkan data yang dicari = ");
scanf("%d",&cariData);
i = 0; j = 9;ketemu = 0;
while((ketemu == 0) && (i<=j)){
k = (int)(i + j) / 2;
if(tabInt[k] == cariData){
ketemu = 1;
}
else{
if(tabInt[k] > cariData){
j = k - 1;
}
else{
i = k + 1;
}
}
}
if(ketemu==1){
printf("Data %d terdapat pada kumpulan data\n",cariData );
}else{
printf("Data %d tidak terdapat pada kumpulan data\n",cariData );
}
}
Sorting
Sorting alias pengurutan, merupakan suatu hal yang sangat dibutuhkan dalam
pemrograman tingkat tinggi. Ada 5 metode sorting, yaitu:
1. Buble Sort
Bubble Sort merupakan metode pengurutan data dengan prinsip: data indeks
ke i dibandingkan dengan data indeks (i+1), apabila data di index ke i lebih besar
(tidak sesuai) dari data di indeks (i+1) maka data akan ditukar. Demikian seterusnya
hingga semua data dalam keadaan terurut (sesuai). Proses dasar yang terjadi dalam
algoritma ini adalah proses pertukaran nilai (swapping).
2. Selection Sort
Pertama cari data terkecil (data dengan nilai terkecil) dari semua data. kemudian
ditukar nilainya dengan data pertama.
Kemudian cari data terkecil dari data kedua sampai data yang terakhir, kemudian
ditukar nilainya dengan data kedua (data terkecil kedua ditukan posisinya dengan data
kedua).
Kemudian cari data terkecil dari data ketiga sampai data terakhir, lalu tukar nilainya
dengan data yang ketiga.
Begitu seterusnya sampai semua data menjadi terurut. Apabila ada N buah data yang
akan kita diurutkan, maka kita butuh N-1 langkah pengurutan, dengan data yang
terakhir, yaitu data ke N tidak perlu diurutkan sebab nilainya sudah pasti yang
terkecil.
3. Insertion Sort
Proses yang terjadi pada pengurutan dengan Insertion Sort adalah dimulai dari
data ke-2 kemudian disisipkan pada tempat yang sesuai. Data pada posisi pertama
dianggap memang sudah benar pada tempatnya. Ilustrasinya mirip seperti saat
menyisipkan kartu di permainan kartu. Dimulai dengan tangan kiri yang kosong dan
kartunya tertumpuk di meja. Selanjutnya kita ambil satu persatu kartu di meja dan
diletakkan di tangan kiri dengan posisi yang benar (terurut). Untuk menemukan posisi
yang benar, maka kita harus membandingkan satu persatu kartu yang ada (di tangan
kiri) secara berurutan.
4. Counting Sort
Keungggulan Algoritma Counting Sort adalah dapat mengurutkan dengan waktu yang
lebih singkat, karena tidak membandingkan dengan elemen lain.
Kelemahan Algoritma Counting Sort adalah menggunakan array yang terlalu banyak.
5. Shell Sort
Shell Sort merupakan salah satu algoritma pengurutan yang lebih handal
dibandingkan Selection Sort dan Bubble Sort. Kehandalannya yaitu: “Membagi deret
data menjadi dua bagian. Masing-masing bagian diurutkan menggunakan Bubble
Sort. Tidak menggunakan iterasi melainkan increment. Perulangan diakukan sesuai
nilai increment.”
Pertama menentukan jarak mula-mula dari data yang akan dibandingkan, yaitu
N/2. Data pertama dibandingkan dengan data dengan jarak N/2. Apabila data pertama
lebih besar dari data ke N/2 tersebut maka kedua data tersebut ditukar. Kemudian data
kedua dibandingkan dengan jarak yang sama yaitu N/2. Demikian seterusnya sampai
seluruh data dibandingkan sehingga semua data ke-j selalu lebih kecil daripada data
ke-(j + N/2).
Pada proses berikutnya, digunakan jarak (N/2) / 2 atau N/4. Data pertama
dibandingkan dengan data dengan jarak N/4. Apabila data pertama lebih besar dari
data ke N/4 tersebut maka kedua data tersebut ditukar. Kemudian data kedua
dibandingkan dengan jarak yang sama yaitu N/4. Demikianlah seterusnya hingga
seluruh data dibandingkan sehingga semua data ke-j lebih kecil dari data ke-(j + N/4).
1. Jarak = N
2. Selama (Jarak > 1) kerjakan baris 3 sampai dengan 9
3. Jarak = Jarak / 2. Sudah = false
4. Kerjakan baris 4 sampai dengan 8 selama Sudah = false
5. Sudah = true
6. j=0
7. Selama (j < N – Jarak) kerjakan baris 8 dan 9
8. Jika (Data[j] > Data [j + Jarak] maka tukar Data[j], Data [j + Jarak], Sudah = true
9. j=j+1
Aplikasi Sorting
1. Bubble Sort
#include "stdio.h"
int main()
{
int L[20],temp,i,j,n=6;
printf("pengurutan berdasarkan Bublle sort \nmasukkan %d elements: \n",n);
for(i=0;i<n;i++){
scanf("%d",&L[i]);}
for(i=0;i<n;i++){printf("%d ",L[i]);}
for(i=n-2;i>=0;i--){
/*5 3 1 2 ===> 3 5 1 2, 3 1 5 2, 3 1 2 5 // 1 3 2 5, 1 2 3 5 // 1 2 3 5*/
for(j=0;j<=i;j++){
if(L[j]>L[j+1]){
temp=L[j];
L[j]=L[j+1];
L[j+1]=temp;
}
}
}
printf("\nsetelah sorting: ");
for(i=0;i<n;i++){printf("%d ",L[i]);}
printf("\n");
}
2. Selection Sort
#include "stdio.h"
int main()
{
int L[20],temp,i,j,n=6;
printf("pengurutan berdasarkan Selection sort \nmasukkan %d elements: \n",n);
for(i=0;i<n;i++){
scanf("%d",&L[i]);}
printf("\nsebelum sorting: ");
for(i=0;i<n;i++){printf("%d ",L[i]);}
for(i=0;i<(n-1);i++){
/*5 3 2 4 ===> 3 5 2 4, 2 5 3 4, 2 5 3 4 // 2 3 5 4, 2 3 5 4 // 2 3 4 5*/
for(j= i+1;j<n;j++){
if(L[i]>L[j]){
temp=L[i];
L[i]=L[j];
L[j]=temp;
}
}
}
printf("\nsetelah sorting: ");
for(i=0;i<n;i++){printf("%d ",L[i]);}
printf("\n");
}
Dimisalkan kita memiliki array sebagai berikut: {5, 1, 12, -5, 16, 2, 12, 14},
kemudian akan diurutkan secara Ascending. berikut ilustrasinya:
3. Insertion Sort
#include "stdio.h"
int main()
{
int L[20],temp,i,j,n=6;
printf("pengurutan berdasarkan Insertion sort \nmasukkan %d elements: \n",n);
for(i=0;i<n;i++){
scanf("%d",&L[i]);}
for(i=0;i<n;i++){printf("%d ",L[i]);}
for(i=1;i<n;i++){
/*5 7 3 1 ===> 5 7 3 1, (5 7 7 1, 5 5 7 1, 3 5 7 1), (3 5 7 7, 3 5 5 7, 3 3 5 7, 1 3 5
7)*/
temp=L[i];
j=i-1;
while((temp<L[j])&&(j>=0)){
L[j+1]=L[j];
j=j-1;
}
L[j+1]=temp;
}
printf("\nsetelah sorting: ");
for(i=0;i<n;i++){printf("%d ",L[i]);}
printf("\n");
}
4. Counting Sort
#include "stdio.h"
int main()
{
int L[20],temp,i,j,n=6,idx;
printf("pengurutan berdasarkan Counting sort \nmasukkan %d elements: \n",n);
for(i=0;i<n;i++){
scanf("%d",&L[i]);}
for(i=0;i<n;i++){printf("%d ",L[i]);}
for (i=0;i<(n-1);i++){
/*4 6 1 2 ===> 4 6 1 2, 4 6 1 2, 4 6 1 2, 1 6 4 2 // 1 6 4 2, 1 6 4 2, 1 2 4 6 // 1 2 4 6,
1 2 4 6*/
idx=i;
for (j=i+1;j<n;j++){
if(L[j]<L[idx]){
idx=j;
}
}
temp=L[i];
L[i]=L[idx];
L[idx]=temp;
}
printf("\nsetelah sorting: ");
for(i=0;i<n;i++){printf("%d ",L[i]);}
printf("\n");
}
5. Shell Sort
#include "stdio.h"
int main()
{
int L[20],temp,i,j,n=6,m;
printf("pengurutan berdasarkan Shell sort \nmasukkan %d elements: \n",n);
for(i=0;i<n;i++){
scanf("%d",&L[i]);}
for(m = n/2;m>0;m/=2){
/*6 7 2 1 ===> 2 7 6 1, 2 1 6 7 // 1 2 6 7, 1 2 6 7, 1 2 6 7*/
for(j=m;j<n;j++){
for(i=j-m;i>=0;i-=m){
if(L[i+m]>=L[i]) break;
else{
temp = L[i];
L[i] = L[i+m];
L[i+m] = temp;
}
}
}
}
http://onestringlab.com/pencarian-data-pada-bahasa-c/
http://www.markijar.com/2015/04/contoh-program-bubble-sort-c.html
http://www.markijar.com/2015/04/contoh-program-selection-sort-c.html
http://www.markijar.com/2015/04/contoh-program-insertion-sort-c.html
http://www.markijar.com/2015/04/contoh-program-counting-sort-c.html
http://www.markijar.com/2015/04/contoh-program-shell-sort-c.html