Searching adalah pencarian data dengan cara menelusuri data-data
tersebut. Tempat pencarian data dapat berupa array dalam
memori(pencarian internal), bisa juga pada file pada external
storage(pencarian external).
Ada dua macam teknik pencarian yaitu pencarian sekuensial dan pencarian
biner. Perbedaan dari dua teknik ini terletak pada keadaan data.
Pencarian sekuensial digunakan apabila data dalam keadaan acak atau
tidak terurut (contoh: sequential search). Sebaliknya, pencarian biner
digunakan pada data yang sudah dalam keadaan urut (contoh: Binary serach
dan interpolation search). Pada Kesempatan ini kita hanya akan membahas
tentang pencarian internal menggunakan Array dinamis (pointer).
Berikut adalah metode-metode yang digunakan dalam Searching
1. Sequential Search (Pencarian berurutan)
Adalah suatu teknik pencarian data dalam array (1 dimensi) yang akan
menelusuri semua elemen-elemen array dari awal sampai akhir, dimana
data-data tidak perlu diurutkan terlebih dahulu. Pencarian berurutan
menggunakan prinsip sebagai berikut : data yang ada dibandingkan satu
per satu secara berurutan dengan yang dicari sampai data tersebut
ditemukan atau tidak ditemukan.
Contoh Program :
#include <iostream>
using namespace std;
main() {
int data[8] = {8,10,6,-2,11,7,1,100};
int cari;
int tanda=0;
cout<<"masukkan data yang ingin dicari = "; cin>>cari;
for(int i=0;i<8;i++){
if(data[i] == cari) tanda=1;
}
if(tanda==1) cout<<"Data ada!\n";
else cout<<"Data tidak ada!\n";
}
2. Binary Search
Salah satu syarat agar binary search dapat dilakukan adalah data sudah
dalam keadaan urut. Dengan kata lain, apabila data belum dalam keadaan
urut, binary search tidak dapat dilakukan.
Prinsip dari binary search dapat dijelaskan sebagai berikut :
a.Mula-mula diambil posisi awal 0 dan posisi akhir = N - 1, kemudian
dicari posisi data tengah dengan rumus (posisi awal + posisi akhir) / 2.
Kemudian data yang dicari dibandingkan dengan data tengah.
b.Jika lebih kecil, proses dilakukan kembali tetapi posisi akhir dianggap sama dengan posisi tengah –1.
c.Jika lebih besar, proses dilakukan kembali tetapi posisi awal dianggap
sama dengan posisi tengah +1. Jika data sama, berarti ketemu.
Contoh Program:
#include <iostream>
using namespace std;
main() {
int data[7] = {10,13,17,34,58,67,99};
int N = 7
int kiri=0,kanan=N-1,tengah,cari;
int tanda=0;
cout<<”Masukan data yang di cari?”;cin>>cari;
while((kiri<=kanan)&&(tanda==0)) {
tengah=(kiri+kanan)/2;
cout<<”data tengah = ”<<tengah<<endl;
if(data[tengah]==cari) tanda=1;
else if(cari < data[tengah]) {
cout<<”cari di kiri\n”;
kanan=tengah-1;
}
else {
kiri=tengah+1;
cout<<”cari di kanan\n”;
}
if(tanda==1) cout<<”Data ada\n”;
else cout<<”Data tidak ada\n”;
}
}
3. Interpolation Search
Teknik ini dilakukan pada data yang sudah terurut berdasarkan kunci
tertentu. Teknik searching ini dilakukan dengan perkiraan letak data.
Contoh ilustrasi: jika kita hendak mencari suatu kata di dalam kamus
telepon, misal yang berawalan dengan huruf J, maka kita tidak akan
mencarinya dari awal buku, tapi kita langsung membukanya pada 1/3 atau
1/4 dari tebal kamus.
Rumus posisi relatif kunci pencarian dihitung dengan rumus:
- Jika data[posisi] > data yg dicari, high = pos – 1
- Jika data[posisi] < data yg dicari, low = pos + 1 Contoh program:
#include <iostream>
#include <math.h>
using namespace std;
main() {
int data[7] = {10,13,17,34,58,67,99};
int low,high,cari,posisi;
float posisi1;
int N = 7,tanda=0;
low=0,high=N-1;
cout<<”Masukan data yang di cari?”;cin>>cari;
do {
posisi1 = (cari-data[low])/(data[high]-data[low])*(high-low)+low;
posisi = floor(posisi1); //pembulatan ke bawah
if(data[posisi]==cari) {
tanda =1;
break;
}
if(data[posisi]>cari) high=posisi-1;
else if (data[posisi]<cari) low=posisi+1
}
while (cari>=data[low]&&cari<=data[high]);
if(tanda==1) cout<<”Data ditemukan\n”;
else cout<<”Data tidak ada\n”;
}
Referensi :
https://rockadimetalisem.files.wordpress.com/2011/07/searching.pdf
https://id.scribd.com/doc/84457575/Materi-Sorting-Dan-Searching
Kamis, 04 Juni 2015
SORTING
A. SELECTION SORT
Selection sort merupakan memindahkan elemen dengan cara membandingkan elemen sekarang dengan elemen yang berikutnya sampai dengan elemen terakhir . Jika ditemukan elemen lain yang lebih kecil dari elemen sekarang maka dicatat posisinya dan kemudian ditukar dan begitu seterusnya.
Contoh Code :
procedure SelectionSort(input/output L[1..N]: array of integer)
{Mengurutkan larik L[1..N] sehingga terurut menaik dengan metode selection sort. Asumsi : nilai N (jumlah elemen array) diketahui dan elemen larik L sudah terdefinisi nilainya }
Kamus
i,j : integer
temp : integer {temporary}
Imaks : integer {indeks yang berisi nilai maks sementara}
Algoritma
for i = n downto 2 do</p>
Imaks ← i
{elemen terakhir diasumsikan sebagai elemen maksimum sementara}
for j = 1 to (i-1)
if L[j] > L[Imaks] then
Imaks ← j
endif
endfor
{pertukaran L[i] dengan L[Imaks]</p>
If L[i] <> L[Imaks] then
temp ← L[i]
L[i] ← L[Imaks]
L[Imaks] ← temp
endif
endfor
B. INSERTION SORT
Insertion sort merupakan metode pengurutan langsung yang mengambil sebuah data sisip, dimana data sisip tersebut akan diurutkan dan menggeser data yang lebih besar dari data sisip agar data sisip dapat ditempatkan di tempat yang benar. Atau dengan kata lain insertion sort adalah sebuah metode pengurutan data dengan menempatkan setiap elemen data pada pososinya dengan cara melakukan perbandingan dengan data – data yang ada.
Ide algoritma dari metode insertion sort ini dapat dianalogikan sama seperti mengurutkan kartu. Jika suatu kartu dipindah tempatkan menurut posisinya, maka kartu yang lain akan bergeser mundur atau maju sesuai kondisi pemindahanan kartu tersebut.
Misalkan sebuah array bertipe integer berisi angka-angka sebagai berikut :
Jika data diatas diurutkan secara menaik (ascending) menggunakan metode insertion sort maka prosesnya sebagai berikut :
Pada perulangan ke-1 data pada array indeks ke 1dijadikan sebagai data sisip, kemudian dibandingkan dengan data yang ada sebelumnya, jika data sebelumnya ada yang lebih besar dari data sisip maka ada data yang harus digeser ke arah kiri, sekarang data sisip digeser satu tempat ke tempat paling depan.
Pada perulangan ke-2 data pada array indeks ke 2 dijaikan sebagai data sisip, kemudian dibandingkn dengan data yang ada sebelumnya, jika data sebelumnya ada yang lebih besar maka data sisip harus digeser ke arah kiri, sekarang data sisip beradapa pada array indeks ke 1.
Pada perulangan ke-3 data pada array indeks ke 3 dijadikan sebagai data sisip, kemudian dibandingkan dengan data yang ada sebelumnya, jika data sebelumnya tidak ada yang lebih besar dari data sisip maka tidak ada data yang harus bergeser.
Pada perulangan ke-4 data pada array indeks ke-4 dijadikan sebagai data sisip, kemudian dibandingkan dengan data yang ada sebelumnya, terdapat data yang nilainya lebih besar dari data sisip maka data sisip harus bergeser kea rah kiri, sekarang data sisip berada pada array indeks ke-4.
Pada perulangan ke-5 data pada array indeks ke-5 dijadikan sebagai data sisip, kemudian dibandingkan dengan data yang ada sebelumnya, terdapat tiga data yang lebih besar nilainya dari data sisip, maka data sisip itu harus digeser. Sekarang data sisip berada pada array indeks ke-2.
Pada perulangan ke-6 data pada array indeks ke-5 dijadikan sebagai data sisip, data sisip kemudian dibandingkan dengan data yang ada sebelumnya, terdapat dua data yang nilainya lebih besar dari data sisip, maka data sisip itu harus digeser. Sekarang data sisip berada pada array indeks ke-4.
Pada perulangan ke-7 data pada array indeks ke-6 dijadikan sebagai data sisip, kemudian, data sisip dibandingkan dengan data yang ada sebelumnya, terdapat tiga data yang nilainya lebih besar dari data sisip, maka data sisip itu harus digeser. Sekarang data sisip berada pada array imdeks ke-4.
Pada perulangan ke-8 data pada array indeks ke-8 dijadikan sebagai data sisip, kemudian dibandingkan dengan data yang ada sebelumnya, jika data sebelumnya tidak ada yang lebih besar dari data sisip maka tidak ada data yang harus bergeser.
Pada perulangan ke-9 data pada array indeks ke-9 dijadikan sebagai data sisip, kemudian data sisip dibandingkan dengan data yang ada sebelumnya, terdapat tiga data yang memiliki nilai lebih besar dari data sisip maka data sisip harus bergeser. Sekarang data sisip berada pada array indeks ke-6.
Hasil akhir :
referensi :
http://elib.unikom.ac.id/files/disk1/392/jbptunikompp-gdl-fitridiani-19560-11-pertemua-1.pdf
http://www.google.co.id/url?sa=t&rct=j&q=&esrc=s&source=web&cd=8&ved=0CFcQFjAH&url=http%3A%2F%2Fmaterikuliahstrukturdata.blogspot.com%2F2012%2F02%2Fpengertian-sorting-sort-sorting-sort.html&ei=j5R1VcmOIYfAmAWJmIGAAg&usg=AFQjCNFnU4jPLAFthtcCX8mVeyeEIx7nlw&sig2=sb0QaXeRA9kzSFt9ojGySA&bvm=bv.95039771,d.dGY
Selection sort merupakan memindahkan elemen dengan cara membandingkan elemen sekarang dengan elemen yang berikutnya sampai dengan elemen terakhir . Jika ditemukan elemen lain yang lebih kecil dari elemen sekarang maka dicatat posisinya dan kemudian ditukar dan begitu seterusnya.
Proses pengurutan menggunakan metode selection sort secara terurut nik adalah sebagai berikut:
- Mencari data terkecil dari data pertama sampai dengan data yang terakhir. kemudian ditukar posisinya dengan data pertama.
- Mencari data terkecil dari data kedua sampai dengan data terakhir, kemudian ditukar posisinya dengan data kedua.
- Mencari data terkecil dari data ketiga sam[ai data terakhir, kemudian ditukar posisimya dengan data ketiga.
- Begitu seterusnya sampai semua data terurut naik. Apabila terdapat n buah data yang akan diurutkan, maka membutuhkan (n-1) langkah pengurutan, dengan data terakhir, yaitu data ke n tidak perlu diurutkan karena hanya tinggal data satu-satunya.
Algoritma pengurutan selection sort ini termasuk algoritma sulit dibagi/ mudah digabung (hard split/easy join). Dari proses pengurutannya, Selection sort ini memiliki dua buah varian yaitu :
1. Maximum Sort
memilih data yang
maksimum dari suatu kumpulan data larik, lalu menempatkan data tersebut
ke elemen paling akhir atau paling awal sesuai pengurutan yang
diinginkan. Data maksimum/minimum yang diperoleh, “diisolasi” dan tidak
diikutsertakan pada proses pencarian data maksimum berikutnya.
2. Minimum Sort
memilih data yang
minimum dari suatu kumpulan data larik , lalu menempatkan data tersebut
ke elemen paling akhir atau paling awal sesuai pengurutan yang
diinginkan. Data minimum yang diperoleh, “diisolasi” dan tidak
diikutsertakan pada proses pencarian data minimum berikutnya.
Dalam pemecahan masalah algoritma selection sort , kita dapat memilih dua metode alternatif algoritma antara lain pemecahan dengan metode Brute Force dan pemecahan dengan metode devide and conquer.
Metode Pemecahan Brute Force
Kekuatan algoritma brute force
terletak pada kemampuannya untuk menemukan semua pemecahan masalah yang
mungkin, akan tetapi langkah yang dibutuhkan sangat banyak sehingga
tidak baik jika digunakan untuk memecahkan masalah yang memiliki masukan
yang cukup besar. Mengurutkan secara ascending dengan metode brute force
Contoh Code :
procedure SelectionSort(input/output L[1..N]: array of integer)
{Mengurutkan larik L[1..N] sehingga terurut menaik dengan metode selection sort. Asumsi : nilai N (jumlah elemen array) diketahui dan elemen larik L sudah terdefinisi nilainya }
Kamus
i,j : integer
temp : integer {temporary}
Imaks : integer {indeks yang berisi nilai maks sementara}
Algoritma
for i = n downto 2 do</p>
Imaks ← i
{elemen terakhir diasumsikan sebagai elemen maksimum sementara}
for j = 1 to (i-1)
if L[j] > L[Imaks] then
Imaks ← j
endif
endfor
{pertukaran L[i] dengan L[Imaks]</p>
If L[i] <> L[Imaks] then
temp ← L[i]
L[i] ← L[Imaks]
L[Imaks] ← temp
endif
endfor
B. INSERTION SORT
Insertion sort merupakan metode pengurutan langsung yang mengambil sebuah data sisip, dimana data sisip tersebut akan diurutkan dan menggeser data yang lebih besar dari data sisip agar data sisip dapat ditempatkan di tempat yang benar. Atau dengan kata lain insertion sort adalah sebuah metode pengurutan data dengan menempatkan setiap elemen data pada pososinya dengan cara melakukan perbandingan dengan data – data yang ada.
Ide algoritma dari metode insertion sort ini dapat dianalogikan sama seperti mengurutkan kartu. Jika suatu kartu dipindah tempatkan menurut posisinya, maka kartu yang lain akan bergeser mundur atau maju sesuai kondisi pemindahanan kartu tersebut.
Misalkan sebuah array bertipe integer berisi angka-angka sebagai berikut :
| 3 | 0 | 1 | 8 | 7 | 2 | 5 | 4 | 9 | 6 |
| 3 | 0 | 1 | 8 | 7 | 2 | 5 | 4 | 9 | 6 |
Pada perulangan ke-1 data pada array indeks ke 1dijadikan sebagai data sisip, kemudian dibandingkan dengan data yang ada sebelumnya, jika data sebelumnya ada yang lebih besar dari data sisip maka ada data yang harus digeser ke arah kiri, sekarang data sisip digeser satu tempat ke tempat paling depan.
Pada perulangan ke-2 data pada array indeks ke 2 dijaikan sebagai data sisip, kemudian dibandingkn dengan data yang ada sebelumnya, jika data sebelumnya ada yang lebih besar maka data sisip harus digeser ke arah kiri, sekarang data sisip beradapa pada array indeks ke 1.
| 0 | 1 | 3 | 8 | 7 | 2 | 5 | 4 | 9 | 6 |
Pada perulangan ke-3 data pada array indeks ke 3 dijadikan sebagai data sisip, kemudian dibandingkan dengan data yang ada sebelumnya, jika data sebelumnya tidak ada yang lebih besar dari data sisip maka tidak ada data yang harus bergeser.
| 0 | 1 | 3 | 8 | 7 | 2 | 5 | 4 | 9 | 6 |
Pada perulangan ke-4 data pada array indeks ke-4 dijadikan sebagai data sisip, kemudian dibandingkan dengan data yang ada sebelumnya, terdapat data yang nilainya lebih besar dari data sisip maka data sisip harus bergeser kea rah kiri, sekarang data sisip berada pada array indeks ke-4.
| 0 | 1 | 3 | 7 | 8 | 2 | 5 | 4 | 9 | 6 |
Pada perulangan ke-5 data pada array indeks ke-5 dijadikan sebagai data sisip, kemudian dibandingkan dengan data yang ada sebelumnya, terdapat tiga data yang lebih besar nilainya dari data sisip, maka data sisip itu harus digeser. Sekarang data sisip berada pada array indeks ke-2.
| 0 | 1 | 2 | 3 | 7 | 8 | 5 | 4 | 9 | 6 |
Pada perulangan ke-6 data pada array indeks ke-5 dijadikan sebagai data sisip, data sisip kemudian dibandingkan dengan data yang ada sebelumnya, terdapat dua data yang nilainya lebih besar dari data sisip, maka data sisip itu harus digeser. Sekarang data sisip berada pada array indeks ke-4.
| 0 | 1 | 2 | 3 | 5 | 7 | 8 | 4 | 9 | 6 |
Pada perulangan ke-7 data pada array indeks ke-6 dijadikan sebagai data sisip, kemudian, data sisip dibandingkan dengan data yang ada sebelumnya, terdapat tiga data yang nilainya lebih besar dari data sisip, maka data sisip itu harus digeser. Sekarang data sisip berada pada array imdeks ke-4.
| 0 | 1 | 2 | 3 | 4 | 5 | 7 | 8 | 9 | 6 |
Pada perulangan ke-8 data pada array indeks ke-8 dijadikan sebagai data sisip, kemudian dibandingkan dengan data yang ada sebelumnya, jika data sebelumnya tidak ada yang lebih besar dari data sisip maka tidak ada data yang harus bergeser.
| 0 | 1 | 2 | 3 | 4 | 5 | 7 | 8 | 9 | 6 |
Pada perulangan ke-9 data pada array indeks ke-9 dijadikan sebagai data sisip, kemudian data sisip dibandingkan dengan data yang ada sebelumnya, terdapat tiga data yang memiliki nilai lebih besar dari data sisip maka data sisip harus bergeser. Sekarang data sisip berada pada array indeks ke-6.
Hasil akhir :
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
referensi :
http://elib.unikom.ac.id/files/disk1/392/jbptunikompp-gdl-fitridiani-19560-11-pertemua-1.pdf
http://www.google.co.id/url?sa=t&rct=j&q=&esrc=s&source=web&cd=8&ved=0CFcQFjAH&url=http%3A%2F%2Fmaterikuliahstrukturdata.blogspot.com%2F2012%2F02%2Fpengertian-sorting-sort-sorting-sort.html&ei=j5R1VcmOIYfAmAWJmIGAAg&usg=AFQjCNFnU4jPLAFthtcCX8mVeyeEIx7nlw&sig2=sb0QaXeRA9kzSFt9ojGySA&bvm=bv.95039771,d.dGY
Langganan:
Komentar (Atom)

