Pencarian (Searching) Kunci (key) digunakan untuk melakukan pencarian record yang diinginkan didalam suatu list. Kunci harus unik, artinya tidak boleh ada kunci yang sama dalam satu list. Kunci yang merupakan bagian dari record, disebut : Kunci - Intern (InternalKey). Kunci yang tidak merupakan bagian dari record, tetapi berkaitan dengan record, disebut Kunci - Luar (ExternalKey), biasanya berupa File Indeks. Contoh : Satu record data mahasiswa terdiri dari (Nama, NIM, Jenis-Kelamin, Alamat, Tempat / Tanggal Lahir). NIM digunakan sebagai kunci karena NIM merupakan attribut yang bersifat unik, tidak ada yang sama. Teknik Sequential Merupakan teknik yang sederhana dan langsung, dapat digunakan pada struktur data baik array maupun linked-list, dan data tidak perlu urut Algoritma : N: Banyaknya record dalam list array k 1. Untuk setiap k[i] : 0 i N-1 Uji apakah k[i] = Kunci 2. Bila k[i] = Kunci, Indeks := i Selesai 3. Bila k[i] <> Kunci, Lanjutkan pencarian hingga i = N-1 4. Bila i = N-1 dan k[i] <> Kunci, Indeks = -1 berarti data yg dicari tdk ada 5. Selesai /** Fungsi SequentialSearch untuk mencari data Key pada array X dgn jumlah elemen N, Return Index Array jika data ada, dan return –1 jika data Key tidak Ada **/ int SequentialSearch( int *X, int Key, int N) { int i; for(i=0; i < N ; i++) if(Key==X[i]) return(i); return(-1); } Teknik Binary Teknik ini hanya dapat dilakukan pada list yang telah terurut dan berada pada struktur array. Algoritma : N: 1. 2. 3. 4. 5. 6. 7. 8. Banyaknya record dalam list array k Kiri = 0 dan Kanan = N-1 Tengah = (int)(Kiri + Kanan) / 2 Bila k[Tengah] = Kunci Maka Indeks = Tengah, Selesai Bila k[Tengah] < Kunci, Kanan = Tengah - 1 Bila k[Tengah] > Kunci, Kiri = Tengah + 1 Bila Kiri Kanan, dan k[Tengah] <> Kunci, Ulangi mulai dari 2. Bila k[Tengah] <> Kunci, Indeks := -1 Selesai /** Fungsi BinarySearch untuk mencari data Key pad array X dgn jumlah elemen N, Return Index dari Array jika data ada, dan return –1 jika data Key tidak ada **/ int BinarySearch(int *X, int Key, int N) { int mid; int low = 0; int high = N – 1; while (low <= high){ mid = (low + high) / 2; if( Key == X[mid]) return(mid); if( Key < X[mid] ) high = mid – 1; else low = mid + 1; } return(-1); } Ilustrasi Pencarian Biner pada daftar mahasiswa dengan kunci = NIM, dan target = 112 (Ursula). Indeks 0 1 2 3 4 5 6 7 8 9 10 11 12 13 Nama Ahmad Zamzami Ursula Hamdan Budiman Rahayu Usman Fifi Alex Lukman Widodo Tiur Halim Rumokoy NIM 34 65 112 116 124 176 178 187 190 208 214 268 333 424 Teknik Interpolasi Contoh List terdiri dari 100 record, kunci paling terendah : 220, tertinggi : 980. Target = 743. Maka perkiraan posisi target : 743 - 220 x 100 = 0.69 980 - 220 Posisi taksiran = 0.69 x 100 = 69. Apakah k[69] = 743 (Kunci) ? Bila Kunci > k[69] maka : k [min] = k[69+1] sedangkan k[max] tetap Bila Kunci < k[69] maka : k [min] = tetap sedangkan k[max] = k[69-1]. Gunakan rumus umum : P= Kunci - k[min] k[max] - k[min] Posisi = Round(P*(max-min))+min