Sunday 8 May 2016

Struktur data (Sorting dan Searching)

Sorting (pengurutan) dan searching (pencarian) merupakan konsep/algoritma yang sering digunakan. Jika berhubungan dengan jumlah data yang besar, data akan mudah dikelola  jika sudah terurut. Algoritma pengurutan pencarian memuat banyak konsep-konsep dasar pemograman, yaitu:
·         Runtutan/Sequence. Kaidah pemrograman yang menyatakan bahwa perintah-perintah dalam program computer akan dieksekusi menurut urutannya dari atas ke bawah
·         Seleksi/Selection. Perintah-perintah dalam program komputer akan dieksekusi berdasarkan nilai kebenaran boolean tertentu.
·         Perulangan/Loop. Sejumlah perintah dalam  program computer yang akan dieksekusi beberapa kali berdasarkan nilai kebenaran boolean-nya.
Sorting dapat dilakukan dengan dua metode, yatu Ascending dan Descending. Ascending akan melakukan pengurutan dari data yang terkecil ke data yang lebih besar. Contoh : 1, 2, 3, . . . ,10.
Descending akan melakukan pengurutan dari data yang terbesar ke data yang lebih kecil. Contoh: 10, 9, 8, . . . , 1.
  1. Pencarian Linier (Linear search)
Pencarian Linier adalah metode pencarian yang membandingkan data kunci (data yang dicari) dengan seluruh data, mulai dari data pertama.
  1. Pencarian Biner (Binary Search)
Pencarian Biner adalah pencarian terhadap data yang sudah terurut. Data kunci dibandingkan dengan data tengah (data pivot), jika sama berarti pencarian ditemukan. Jika data kunci lebih besar dari data tengah maka pecarian akan dilakukan disebelah kanan data tengah (data diurutkan secara ascending). Jika belum ditemukan maka data pada sisi pencarian akan dibagi dua kembali, dibandingkan lagi, demikian seterusnya sampai data ditemukan/tidak ditemukan.  
  1. Bubble Sort
Algoritma bubble sort akan membandingkan elemen yang saat ini dibaca dengan elemen yang berikutnya. Jika elemen yang saat ini dibaca lebih besar dari elemen berikutnya,maka tukarkan.
  1. Insertion Sort
Pada metode ini pengurutan dilakukan dengan cara membandingkan data ke-i (dimulai dari data ke-2 sampai dengan data terakhir) dengan data berikutnya. Jika ditemukan dat yang lebih kecil maka data tersebut disisipkan ke depan sesuai dengan posisi yang seharusnya.
  1. Selection Sort
Metode ini akan membandingkan elemen yang sekarang dengan elemen beikutnya sampai dengan elemen yang terakhir. Jika ditemukan elemen yang lebih kecil dari elemen sekarang, maka dicatat posisinya dan kemudian ditukar.
  1. Quick Sort
Metode Quick Sort adalah membandingkan suatu elemen pivot dengan elemen yang lain dan menyusunnya sedemikian rupa sehingga elemen tersebut terletak disebelah kirinya dan elemen-elemen yang lebih  besar daripada pivot terletak disebelah kanan.

Contoh program :
import java.util.Scanner;

public class BubbleSort{

public void bubbleSort(float larik2[])
{
     for (int i=0;i<larik2.length;i++)
     {
          for (int elemen=0;elemen<larik2.length-1;elemen++)
          {
              if (larik2[elemen]>larik2[elemen+1])
                   tukar(larik2, elemen,elemen+1);
          }
     }
}

public void tukar(float larik3[], int satu, int dua)
{
     float temp;
     temp = larik3[satu];
     larik3[satu] = larik3[dua];
     larik3[dua] = temp;
}

public static void main(String args[]){
     Scanner masuk = new Scanner(System.in);
     BubbleSort lrk = new BubbleSort();
     float nilai[]= new float[5];
     System.out.println("Masukan 5 buat data nilai");
     for (int i = 0; i < 5; i++)
     {
          System.out.print( (i + 1 )+" : ");
          nilai[i]=masuk.nextFloat();
     }
     System.out.println("Data nilai yang dimasukan");
     for (int i = 0; i < 5; i++)
          System.out.println(nilai[i]);
     System.out.println("Data hasil pengurutan    ");
     lrk.bubbleSort(nilai);
     for (int i = 0; i < 5; i++)
          System.out.println(nilai[i]);
}
}

import java.util.Scanner;

public class QuickSort{

public void quickSort(float A[], int L, int R)
{
  int i,j;
  float p;
  p=A[(L+R)/2];
  i=L;
  j=R;
  while (i<=j)
  {
    while (A[i]<p) i++;
    while (A[j]>p) j--;
    if (i<=j)
    {
      tukar(A,i,j);
      i++;
      j--;
    }
  }
  if (L<j) quickSort(A,L,j);
  if (i<R) quickSort(A,i,R);
}

public void tukar(float larik3[], int satu, int dua)
{
     float temp;
     temp = larik3[satu];
     larik3[satu] = larik3[dua];
     larik3[dua] = temp;
}


public static void main(String args[]){
     Scanner masuk = new Scanner(System.in);
     QuickSort lrk = new QuickSort();
     float nilai[]= new float[5];
     System.out.println("Masukan 5 buat data nilai");
     for (int i = 0; i < 5; i++)
     {
          System.out.print( (i + 1 )+" : ");
          nilai[i]=masuk.nextFloat();
     }
     System.out.println("Data nilai yang dimasukan");
     for (int i = 0; i < 5; i++)
          System.out.println(nilai[i]);
     System.out.println("Data hasil pengurutan    ");
     lrk.quickSort(nilai, 0, nilai.length-1);
     for (int i = 0; i < 5; i++)
          System.out.println(nilai[i]);
}
}


import java.util.Scanner;

public class BinerSearch
{

     public int pencarianBiner(int b[], int kunciPencarian, int low, int high)
     {
       int i, middle;
       while (low<=high)
       {
         middle = (low+high)/2;
          if (kunciPencarian==b[middle]) return middle;
         else if (kunciPencarian<b[middle]) high = middle-1;
         else low = middle+1;
       }
       return -1;
     }

     public static void main(String args[])
     {
      Scanner input = new Scanner(System.in);
      BinerSearch biner = new BinerSearch();
      int i, x, hasil;
      boolean ketemu;
      int data[] = {9, 13, 14, 26, 34};
      System.out.print("Masukan Data yang dicari = ");
      x = input.nextInt();
      hasil = biner.pencarianBiner(data, x, 0, data.length-1);
      if (hasil>=0)
        System.out.println("Data tersebut ada pada posisi ke-"
             +(hasil+1));
           else
        System.out.println("Data tidak ketemu !");

     }
}


Selamat mencoba ^_^

Sumber : Modul Praktikum Struktur data STMIK AKAKOM Yogyakarta 

No comments:

Post a Comment