Selasa, 13 Januari 2015

Merge Sort pada Java

Hai semua~

Setelah sebelumnya kita membahas tentang salah satu Algoritma Sorting (Insertion Sort), sekarang kita membahas salah satu algoritma sorting lain yaitu Merge Sort .

Merge Sort adalah algoritma pengurutan dalam ilmu komputer yang dirancang untuk memenuhi kebutuhan pengurutan atas suatu rangkaian data yang tidak memungkinkan untuk ditampung dalam memori komputer karena jumlahnya yang terlalu besar. Algoritma ini ditemukan oleh John von Neumann pada tahun 1945.

Algoritma pengurutan data merge sort dilakukan dengan menggunakan cara divide and conquer yaitu dengan memecah kemudian menyelesaikan setiap bagian kemudian menggabungkannya kembali. Pertama data dipecah menjadi 2 bagian dimana bagian pertama merupakan setengah (jika data genap) atau setengah minus satu (jika data ganjil) dari seluruh data, kemudian dilakukan pemecahan kembali untuk masing-masing blok sampai hanya terdiri dari satu data tiap blok.

Setelah itu digabungkan kembali dengan membandingkan pada blok yang sama apakah data pertama lebih besar daripada data ke-tengah+1, jika ya maka data ke-tengah+1 dipindah sebagai data pertama, kemudian data ke-pertama sampai ke-tengah digeser menjadi data ke-dua sampai ke-tengah+1, demikian seterusnya sampai menjadi satu blok utuh seperti awalnya. Sehingga metode merge sort merupakan metode yang membutuhkan fungsi rekursi untuk penyelesaiannya.




Berikut adalah source code Merge Sort


/*
* Mengimplementasikan Merge Sort pada Java
*/
 
import java.util.Scanner;
 
/* Class MergeSort */
public class MergeSort 
{
   /* Fungsi Merge Sort */
   public static void sort(int[] a, int low, int high) 
   {
       int N = high - low;         
       if (N <= 1) 
           return; 
       int mid = low + N/2; 
       
                // recursively sort 
       sort(a, low, mid); 
       sort(a, mid, high); 
       
                // memisahkan 2 sub array yang berurutan 
       int[] temp = new int[N];
       int i = low, j = mid;
       for (int k = 0; k < N; k++) 
       {
           if (i == mid)  
               temp[k] = a[j++];
           else if (j == high) 
               temp[k] = a[i++];
           else if (a[j]<a[i]) 
               temp[k] = a[j++];
           else 
               temp[k] = a[i++];
       }    
       for (int k = 0; k < N; k++) 
           a[low + k] = temp[k];         
   }
   
            /* Main method */
   public static void main(String[] args) 
   {
       Scanner scan = new Scanner( System.in );        
       System.out.println("Test Merge Sort \n");
       int n, i;
            
            /* Memasukan jumlah data dalam integer */
       System.out.println("Masukan jumlah element integer");
       n = scan.nextInt();
       /* Membuat integer array di data n */
       int arr[] = new int[ n ];
       /* Menerima data */
       System.out.println("\nMasukan nilai "+ n +" element integer");
       for (i = 0; i < n; i++)
           arr[i] = scan.nextInt();
       
            /* Memanggil metode sorting (Merge Sort) */
       sort(arr, 0, n);
       
            /* Menampilkan data array yang sudah diurutkan */
       System.out.println("\nElement integer setelah diurutkan ");        
       for (i = 0; i < n; i++)
           System.out.print(arr[i]+" ");            
       System.out.println();            
                }    
}


Dan ini contoh program yang sudah dijalankan menggunakan Merge Sort


Sekian tutorial kali ini . Semoga bermanfaat~

Insertion Sort pada Java

Hai hai ..

Kali ini kita akan membahas tentang Algoritma Sorting pada bahasa Java . Algoritma sorting adalah : 
Algoritma yang meletakan elemen-elemen suatu kumpulan data dalam urutan tertentu atau proses pengurutan data yang sebelumnya disusun secara acak sehingga menjadi tersusun secara teratur menurut suatu aturan tertentu, kita ambil contoh pada aplikasi perbankan. Aplikasi tersebut mampu menampilkan daftar akun-akun yang aktif dan hampir seluruh pengguna sistem akan memilih tampilan daftar berurutan demi mempermudah penelusuran data. Misalnya urutan numerical atau leksikografi atau urutan abjad.


Insertion Sort adalah salah satu algoritma sederhana untuk pengurutan data yang acak agar menjadi data yang terurut. Dimana algoritmanya itu mirip dengan seperti kita mengurutkan kartu, jadi kita harus menentukan kunci(data yang kedua) kemudian dibandingkan dengan data sebelumnya jika data sebelumnya itu lebih besar maka tukar posisi begitu seterusnya sampai data sudah terurut semua.


Berikut contoh source code pada java untuk Insertion Sort  :

1.  /*
2.   * Mengimplementasikan Insertion Sort ke dalam java
3.   */
4.   
5.  import java.util.Scanner;
6.   
7.  /* Class InsertionSort */
8.  public class InsertionSort
9.  {
10.    /* Fungsi Insertion Sort */
11.    public static void sort( int arr[] )
12.    {
13.        int N = arr.length;
14.        int i, j, temp;
15.        for (i = 1; i< N; i++)
16.        {
17.            j = i;
18.            temp = arr[i];   
19.            while (j > 0 && temp < arr[j-1])
20.            {
21.                arr[j] = arr[j-1];
22.                j = j-1;
23.            }
24.            arr[j] = temp;           
25.        }       
26.    }   
27.    /* Main method */
28.    public static void main(String[] args)
29.    {
30.        Scanner scan = new Scanner( System.in );       
31.        System.out.println("Insertion Sort Test\n");
32.        int n, i;
33.        /* Memasukan jumlah data dalam integer */
34.        System.out.println("Masukan jumlah element integer");
35.        n = scan.nextInt();
36.        /* Membuat integer array dielement n */
37.        int arr[] = new int[ n ];
38.        /* Menerima data */
39.        System.out.println("\nMasukan nilai "+ n +" element integer");
40.        for (i = 0; i < n; i++)
41.            arr[i] = scan.nextInt();
42.        /* Memanggil metode sorting (Insertion Sort) */
43.        sort(arr);
44.        /* Menampilkan data array yang sudah diurutkan */
45.        System.out.println("\nElement integer setelah diurutkan ");       
46.        for (i = 0; i < n; i++)
47.            System.out.print(arr[i]+" ");           
48.        System.out.println();                    
49.    }   
      50.}

Dan ini output yang dihasilkan



Sekian tutorial kali . Semoga bermanfaat dan selamat ngodiing !!

Selasa, 06 Januari 2015

Decision dan Looping pada Java


Hai hai ..

Setelah tipe data dan console data, kali ini saya akan membahas tentang Decision Process dan Looping Process . Pastinya tau dong yah maksud dari decision dan looping disini apa . Decision adalah comment yang berfungsi untuk memutuskan sesuatu, sedangkan looping adalah comment yang berfungsi untuk mengulang comment comment yang sudah ada . Lebih lanjurnya, silahkan di liat dibawah ini : 

Terdapat 3 jenis syntax decision pada Java, yaitu:

1. If-Else,
contoh: 

if(i>=40) 
{
    // 40 ke atas
 }

else if(i>=0 && i<=20) 
{
    // 0 sampai 20
 }

else 
{      
    // selain keduanya
 }

2. Switch-Case.
contoh:

switch(i) 
{
        case 1: case 2: case 3: // 1, 2, dan 3
        break;
        
        case 7:// 7 saja
        case 9:// 7 dan 9
        break;
        
        default: // selain 1, 2, 3, 7, dan 9
        break;
}

3. Ternary Operator, contoh:

int i2 = ( i > 10 ? 3 : 2 );

4. Try-Catch-Finally.
contoh:

Console console = System.console();
String line = console.readLine();
int val = 0;
try {
        val = Integer.parseInt(val);
      }
         catch (Exception ex)  // atau NumberFormatException
         {    
                  System.err.println("angka tidak valid”);
         }

         System.out.println("nilai val adalah " + val);


Nah yang di atas adalah beberapa macam decision, sekarang kita bahas untuk yang looping .

Terdapat 4 jenis syntax looping pada Java, yaitu:

1. while 
yaitu looping dengan pemeriksaan di awal, contoh:

x=8; while(x>2) 
{
         x -= 2;
         System.out.print(x);
}

2. dowhile,
yaitu looping dengan pemeriksaan di akhir, minimal dijalankan 1x,
contoh:

x=9; do 
{
    System.out.print(x);
    x /= 2;
 } 

while(x>1);

3. for;;
yaitu looping dengan inisialisasi, syarat dan increment/decrement, contoh:

for(int z=1;z<9;z+=2) 
{
      System.out.print(z);
 }

4. for:
yaitu looping untuk array atau parameter varargs, contoh:

class Test 
{
    public static void main(String[] args) 
    {
         for(String s: args) System.out.println( s );
    }
// jalankan program dengan perintah: java Test 1 dua ‘ti ga’ "em’pat"

Senin, 05 Januari 2015

Console Input/ Output pada Java

Hai guys !!

Kali ini saya akan membahas tentang input dan output pada java . Java bukan bahasa pemrograman untuk console, sehingga terdapat beberapa cara agar kita bisa mendapatkan input dari console, salah satunya yang akan kita beri contoh adalah menggunakan BufferedReader class :

1. Kita tambahkan satu baris perintah dibawah ini agar class bisa berjalan :
import java.io.BufferedReader
 Class BufferedReader adalah kelas abstrak yang menangani baca tulis ke suatu media. 

2. Class ini membutuhkan class lain sebagai pekerjanya, yaitu InputStreamReader. DanInputStreamReader membutuhkan media tempat baca tulis dilakukan, yaitu System.in. Semua ini bisa dituliskan dalam satu perintah yaitu :  
BufferedReader br = new BufferedReader (new InputStreamReader(System.in));  
Di sini variabel br merupakan objek yang merupakan jelmaan dari class BufferedReader.  

3. Untuk memerintahkan Java mengambil input dari user, kita gunakan fungsi readline() yang terdapat pada class BufferedReader, dalam hal ini terealisasi pada objek br.  
nama = br.readLine();  

4. Karena kita berhubungan langsung dengan sistem IO (input-output) komputer yang harus diasumsikan tidak pasti (misalnya ada masalah pada sistem keyboard, atau komputer sedang bekerja berat sehingga input dari user tidak bisa diambil), kita harus menempatkan fungsi readLine() pada klausa:
try { ... } catch (IOException ioe) { ... }  
Perintah di dalam try { ... } adalah perintah yang kita ingin jalankan pada situasi yang "mungkin" tidak berhasil.  

Parameter pada catch, yaitu IOException ioe adalah jenis kesalahan yang ingin kita tangkap. Dalam hal ini kita ingin menangkap adanya kesalahan IO, yaitu kesalahan yang bertipe IOException.  

Perintah di dalam catch { ... } adalah perintah yang akan dilakukan apabila kesalahan ditangkap. Jika tidak ada kesalahan IO yang ditemukan, maka bagian ini akan dilewatkan (tidak dijalankan).


Beberapa perbedaan dalam penulisan input output pada java tersebut meskipun lebih rumit tetapi memiliki keunggulan yakni mampu menangkap segala bentuk kondisi yang memungkinkan untuk membatalkan perintah sehingga menghindari program tidak crash atau error.

Berikut berbagai macam alternatif class yang bisa digunakan :

1. Scanner class, contoh:
import java.util.Scanner; // di luar class
Scanner scan = new Scanner(System.in);
String s = scan.next();
int i = scan.nextInt();


2. DataInputStream class, contoh:
import java.io.DataInputStream; // di luar class
DataInputStream dis = new DataInputStream(System.in);
int i = dis.readInt();

3. Console Class, contoh:
import java.io.Console; // di luar class
Console console = System.console();
String s = console.readLine();
int i = Integer.parseInt(console.readLine());


Terdapat beberapa cara untuk mencetak pada console, diantaranya:

1. System.out.print, untuk mencetak tanpa ganti baris, contoh:
System.out.print("hai");
System.out.print(123);

2. System.out.println, untuk mencetak dan diakhiri ganti baris, contoh:
System.out.println("hai");
System.out.println(123);

3. System.out.printf, untuk mencetak dengan format, contoh:
System.out.printf("%s %d \n %.2f", "hai", 123, 45.678 );
System.out dapat diganti dengan System.err untuk mencetak pada output kedua
(stderr, standard error). Untuk mencetak dengan format sesuai terminal, System.out dapat
diganti dengan System.console().writer(), contoh:
import java.io.Console; // di luar class
import java.io.PrintWriter; // di luar class
Console console = System.console();
char[] pwd = pw.readPassword("Masukkan password: ");
PrintWriter out = console.writer();
out.println("Password anda: " + pwd);