Kamis, 17 Mei 2012

SORTING pada Java

Apa sih sorting itu? Awalnya saya juga binggung maksud dari sorting atau pengurutan. Setelah browsing-browsing dan dapat materi diperkuliahan akhirnya saya tau apa yang dimaksud dengan sorting itu....
Sorting adalah proses menyusun elemen – elemen dengan tata urut tertentu dan proses tersebut terimplementasi dalam bermacam aplikasi. Kita ambil contoh pada aplikasi perbankan. Aplikasi tersebut mampu menampilkan daftar account yang aktif. Hampir seluruh pengguna pada sistem akan memilih tampilan daftar berurutan secara ascending demi kenyamanan dalam penelusuran data. Dalam artian sorting digunakan untuk mengurutkan sesuatu ( misalnya : kata, buku telepon , dll ). Sorting yang kita terapkan menggunakan tipe data array agar pemahaman serta pengimplementasiannya lebih  mudah. Pada umumnya terdapat dua jenis pengurutan :
- Ascending (Naik).
- Descending (Turun).
Contoh :
Data  :  Array [1..6] of Byte = (22, 10, 15, 3, 8, 2);
Data Acak : 22 10 15 3 8 2
Terurut Ascending : 2 3 8 10 15 22
Terurut Descending : 22 15 10 8 3 2
Untuk melakukan proses pengurutan tersebut dapat digunakan berbagai macam cara/metode.
Macam-macam sorting yaitu :
1.  Bubble Sorting
merupakan salah satu jenis sorting. Bubble sort ada metode sorting termudah. Diberikan nama “bubble” karena konsep dari algoritmanya diibaratkan seperti gelembung air untuk elemen struktur data yang seharusnya pada posisi awal. Bubble sort mengurut data dengan cara membandingkan elemen sekarang dengan elemen berikutnya. Dimana cara kerjanya adalah dengan berulang-ulang melakukan proses looping ( perulangan) terhadap elemen-elemen struktur data yang belum diurutkan. Nilai dari masing-masing elemen akan dibandingkan selama proses looping tersebut .jika selama proses looping tersebut ditemukan ada urutannya tidak sesuai dengan permintaan, maka akan dilakukan proses penukaran (swap). Secara tidak langsung, algoritma dari program ini seolah-olah menggeser satu demi satu elemen dari kanan ke kiri atau dari kiri ke kanan tergantung pada jenis pengurutannya. Jenis pengurutan sorting ada 2 yaitu asscending dan descending. Dimana asscending itu mengurut data dari kecil ke besar dan descending itu mengurut data dari besar ke kecil. Jika semua elemen sudah diperiksa oleh fungsi bubble sort, dan tidak ada pertukaran lagi atau semua nilai sudah sesuai, maka saat itu program bubble sort akan berhenti bekerja. Pola Bubble sort yaitu bertukar dengan data sebelahnya.

2. Insertion Sort

Algoritma insertion sort pada dasarnya memilah data yang akan diurutkan menjadi dua bagian, yang belum diurutkan (meja pertama), dan yang telah diurutkan (meja kedua). Elemen pertama yang diambil dari bagian array yang belum diurutkan dan kemudian diletakkan pada posisinya sesuai dengan bagian lain dari array yang telah diurutkan. langkah ini dilakukan secara berulang hingga tidak ada lagi elemen yang tersisa pada bagian array yang belum diurutkan. Pola dari Insertion Sort menggurutkan n atau 2 elemen dari terdepan dst.

3. Selection sort
Merupakan Kombinasi antara sorting dan searching. Metode selection sort merupakan perbaikan dari metode bubble sort dengan mengurangi jumlah perbandingan. Selection sort merupakan metode pengurutan dengan mencari nilai data terkecil dimulai dari data diposisi 0 hingga diposisi N-1. Jika terdapat N data dan data terkoleksi dari urutan 0 sampai dengan N-1. Selama proses, perbandingan dan pengubahan, hanya dilakukan pada indeks permbandingnya saja, pertukaran data secara fisik terjadi pada akhir proses.sesuai dengan itu maka algoritma pengurutan data secara Selection adalah sebagai berikut :
  1. Cari data terkecil dalam interval j = 0 sampai dengan j = N-1
  2. Jika pada posisi pos ditemukan data yang terkecil, maka tukarkan data diposisi pos dengan data di posisi i jika k.
  3. Ulangi langkah 1
4. Marge Sort
Pengurutan algoritma Merge Sort membuat pengurutan dengan membagi 2 dan menggabungkannya. Metoda ini cukup efisien untuk diterapkan. Sama dengan Quick Sort, algoritma Merge Sort adalah dasar pembagian dan penyelesaiannya. Pertama urutan atau elemen data awal diurutkan dengan membaginya menjadi 2 bagian (Devide). Setengahnya diurutkan dengan bebas (Conquer). Kemudian 2 bagian itu digabungkan dengan cara diurut sesuai dengan urutan (Combine).
1. Devide, yakni memilih masalah menjadi sub-masalah.
2. Conquer, yakni menyelesaikan sub-masalah tersebut secara rekursi.
3. Kombinasi/Penggabungan, menggabungkan solusi dari sub-masalah
 
5. Quick Sort 
Pengerian Quick Sort adalah algoritma yang dijalankan sebagai akibat dari terlalu banyaknyadaftar yang diurutkan, dengan menghasilkan lebih banyak daftar yang diurutkan sebagai output. Algoritma merge ini disesuaikan untuk mesin drive tape. Penggunaannya dalam akses memori acak besar yang terkait telah menurun, karena banyak aplikasi algoritma merge yang mempunyai alternatif lebih cepat ketika kamu memiliki akses memori acak yang menjaga semua data. Hal ini disebabkan algoritma ini membutuhkan setidaknya ruang atau memori dua kali lebih besar karena dilakukan secara rekursif dan memakai dua tabel.

Contoh program menu Sorting
public static void main (String []riris){
    int menu=0;
    do{
    try{
    menu=Integer.parseInt(JOptionPane.showInputDialog("Pilih Menu :"+ "\n1.Bubble Sort"+"\n2.Selection Sort"+"\n3.Insertion Sort"+"\n4.Exit"));
    switch(menu){
        case 1:
        int n= Integer.parseInt(JOptionPane.showInputDialog("Banyaknya data?"));
        int data []  = new int [n];
        System.out.println("Sorting menggunakan Bubble Sort");
        System.out.println("Data sebelum diurutkan :");
        for(int a=0; a<n; a++){
        data[a]=Integer.parseInt(JOptionPane.showInputDialog("Data ke-" + (a+1)));
        System.out.println("Data ke-" +a + "=" + data [a] );
        }

        int temp;

        for (int i=1;i<n;i++){
        for(int j=n-1; j>=i; j--){
        if (data[j]<data[j-1]){

        temp=data[j];

        data[j]=data[j-1];

        data[j-1]=temp;

        }

        }

        }


        System.out.println("Data yang sudah diurutkan: ");
        for (int i=0;i<data.length;i++)
        System.out.println("Data ke-"+i+ "=" +data [i]);
        System.out.println("------------------------------");break;

        case 2:
        int m= Integer.parseInt(JOptionPane.showInputDialog("Banyaknya data?"));
        int nilai []= new int [m];
        int index,large;
        System.out.println("Sorting menggunakan Selection Sort");
        System.out.println("Data Sebelum Diurutkan");
        for(int a=0; a<m; a++){
            nilai [a]=Integer.parseInt(JOptionPane.showInputDialog("Data ke-"+(a+1)));
            System.out.println("Data ke-"+a+"="+nilai[a]);
        }
        for (int i=m-1; i>0; i--){
        large=nilai[0];
        index=0;
         for (int j=1; j<=i; j++){
             if (nilai [j]>large){
                 large=nilai [j];
                 index=j;
             }
        }
        nilai[index]=nilai [i];
        nilai[i]=large;
        }
        System.out.println("Data yang sudah diurutkan : ");
        for (int i=0;i<m;i++)
        System.out.println(nilai[i]+ " ");
        System.out.println("------------------------------");break;

        case 3:
        int l= Integer.parseInt(JOptionPane.showInputDialog("Banyaknya data?"));
        int nilai2 []=new int [l];
        int y;
        System.out.println("Sorting menggunakan Insertion Sort");
        System.out.println("Data Sebelum Diurutkan");
        for(int a=0; a<l; a++){
        nilai2[a]=Integer.parseInt(JOptionPane.showInputDialog("Data ke-" + (a+1)));
        System.out.println("Data ke-" +a + "=" + nilai2 [a] );
        } System.out.println("Data Yang Sudah Diurutkan");
        for (int j=1; j<l; j++){
        y=nilai2[j];
        for (int i=j-1; i>=0 && y<nilai2[i]; i--){
           nilai2 [i+1]=nilai2 [i];
           nilai2 [i]=y;
            }
        for (int i=0; i<l; i++)

              System.out.print(nilai2[i]+ " ");
              System.out.println("");
          }
        System.out.println("Arigato Gozaimasu :)");break;

          case 4:
        System.exit(0); break ;

   default: JOptionPane.showMessageDialog(null, "pilihan antara 1-3"); break;
}
}catch(Exception e)
{
JOptionPane.showMessageDialog(null,"MASUKAN ANGKA", "anda salah", JOptionPane.ERROR_MESSAGE);
    }
}while (menu!=4);

}
}

Selamat Mencoba :)

3 komentar:

coding yang insertion masih ada yang salah
tapi yang intinya aja ya, kalau menampilkan hasilnya udah bener
for (j=1;j<=n;j++ ){
int y = data[j];
for (int i=j-1; i>=0 && y<data[i] ;i--){
data[i+1]= data[i];
data[i]= y;

kunjungi blog ku ya
http://chudit.blogspot.com

Poskan Komentar