Sabtu, 15 September 2012

Searching

share

public class Larik {
    public static int sequentialSearch(int key, int data[]) {
        // langkah looping untuk mengetahui apakah suatu data ada dalam array
        for (int i = 0; i < data.length; i++) {
            // langkah pengujian apakah data ke i = key
            if (key == data[i]) {
                // jika ya dikembalikan ke nilai i dan data ditemukan
                return i;
            }
        }
        // jika tidak dikembalikan ke nilai -1 dan data tidak ditemukan
        return -1;
    }

    public static int binarySearch(int key, int data[]) {
        // inisialisasi nilai indek awal dan indek akhir
        int indekAwal = 0;
        int indekAkhir = data.length - 1;
        // langkah pengujian apakah indek awal <= indek akhir
        while (indekAwal <= indekAkhir) {
            // mencari nilai indek tengah
            int indektengah = (indekAwal + indekAkhir) / 2;
            // membandingkan apakah nilai indek tengah = key
            if (data[indektengah] == key) {
                return indektengah;
                // jika tidak dilakukan pengetesan larik kiri
            } else if (data[indektengah] > key) {
                indekAkhir = indektengah - 1;
                // jika tidak dilakukan pengetesan larik kanan
            } else if (data[indektengah] < key) {
                indekAwal = indektengah + 1;
            }
        }
        // nilai pengembalian jika nilai indek tengah = key
        return -1;
    }

    public static int interpolationSearch(int key, int data[]) {
        // inisialisasi nilai indek awal dan indek akhir
        int indekAwal = 0;
        int indekAkhir = data.length - 1;
        // langkah pengujian apakah indek awal <= indek akhir
        while (indekAwal <= indekAkhir) {
            // mencari indek tengah
            int indektengah = indekAkhir + ((key - data[indekAkhir])*
                    (indekAwal - indekAkhir)) / (data[indekAwal] -
                    data[indekAkhir]);
            // membandingkan apakah indek tengah = key
            if (data[indektengah] == key) {
                return indektengah;
                // jika tidak dilakukan penegetsan larik kiri
            } else if (data[indektengah] > key) {
                indekAkhir = indektengah - 1;
                // jika tidak dilakukan pengetesan larik kanan
            } else if (data[indektengah] < key) {
                indekAwal = indektengah + 1;
            }
        }
        // nilai pengembalian jika nilai indek tengah = key
        return -1;
    }
}


import java.util.Arrays;
import java.util.Scanner;
public class SearchingMain {
    public static void main(String[] args) {
        int data[] = {10, 69, 3, 30, 61, 86, 14, 43, 9, 15, 45, 13};
        System.out.println("DATA SEBELUM DIURUTKAN");
        for (int n = 0; n < data.length; n++) {
            System.out.printf(" " +data[n]);
        }
        System.out.println();
        Arrays.sort(data);
        System.out.println("DATA SETELAH DIURUTKAN");
        for (int n = 0; n < data.length; n++) {
            System.out.printf(" " +data[n]);
        }
        System.out.println();
        System.out.println();
       
        System.out.println("MODEL SEQUENTIAL SEARCH");
        System.out.printf("Masukkan nilai yang diinginkan = ");
        int key = new Scanner(System.in).nextInt();
        int x = Larik.sequentialSearch(key, data);
        if (x == -1) {
            System.out.printf("Angka "+key+" tidak ditemukan dalam indek");
        }
        else {
            System.out.printf("Angka "+key+" ditemukan dan terletak "
                    + "pada indek ke- "+x);
        }
        System.out.println();
        System.out.println();
       
        System.out.println("MODEL BINARY SEARCH");
        System.out.printf("Masukkan nilai yang diinginkan = ");
        int key2 = new Scanner(System.in).nextInt();
        int y = Larik.binarySearch(key2, data);
        if (y == -1) {
            System.out.println("Angka "+key2+" tidak ditemukan dalam indek");
        } else {
            System.out.println("Angka "+key2+" ditemukan dan terletak "
                    + "pada indek ke- "+y);
        }
        System.out.println();
       
        System.out.println("MODEL INTERPOLATION SEARCH");
        System.out.printf("Masukkan nilai yang diinginkan = ");
        int key3 = new Scanner(System.in).nextInt();
        int z = Larik.interpolationSearch(key3, data);
        if (z == -1) {
            System.out.println("Angka "+key3+" tidak ditemukan dalam indek");
        } else {
            System.out.println("Angka "+key3+" ditemukan dan terletak "
                    + "pada indek ke- "+z);
        }
    }
}






Tidak ada komentar:

Posting Komentar