SELAMAT DATANG DI RAHMATANG BLOG

ALGORITMA SORTING

Pertemuan 6 - Algoritma Sorting

Insertion Sort

Salah satu algoritma sorting yang paling sederhana adalah insertion sort. Ide dari algoritma ini dapat dianalogikan seperti mengurutkan kartu. Penjelasan berikut ini menerangkan bagaimana algoritma insertion sort bekerja dalam pengurutan kartu. Anggaplah anda ingin mengurutkan satu set kartu dari kartu yang bernilai paling kecil hingga yang paling besar. Seluruh kartu diletakkan pada meja, sebutlah meja ini sebagai meja pertama, disusun dari kiri ke kanan dan atas ke bawah. Kemudian kita mempunyai meja yang lain, meja kedua, dimana kartu yang diurutkan akan diletakkan. Ambil kartu pertama yang terletak pada pojok kiri atas meja pertama dan letakkan pada meja kedua. Ambil kartu kedua dari meja pertama, bandingkan dengan kartu yang berada pada meja kedua, kemudian letakkan pada urutan yang sesuai setelah perbandingan. Proses tersebut akan berlangsung hingga seluruh kartu
pada meja pertama telah diletakkan berurutan pada meja kedua. Algoritma insertion sort pada dasarnya memilah data yang akan diurutkan menjadi dua bagian, yang belum diurutkan (meja pertama) dan yang sudah diurutkan (meja kedua). Elemen pertama diambil dari bagian array yang belum diurutkan dan kemudian diletakkan sesuai posisinya pada 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.

Algoritma

     void insertionSort(Object array[], int startIdx, int endIdx) {
       for (int i = startIdx; i < endIdx; i++) {
         int k = i;
         for (int j = i + 1; j < endIdx; j++) {
                if (((Comparable) array[k]).compareTo(array[j])>0) {
                       k = j;
                }
         }
         swap(array[i],array[k]);
       }
     }

Contoh Insertion Sort


Selection Sort

Jika Anda diminta untuk membuat algoritma sorting tersendiri, anda mungkin akan menemukan sebuah algoritma yang mirip dengan selection sort. Layaknya insertion sort, algoritma ini sangat rapat dan mudah untuk diimplementasikan. Mari kita kembali menelusuri bagaimana algoritma ini berfungsi terhadap satu paket kartu. Asumsikan bahwa kartu tersebut akan diurutkan secara ascending. Pada awalnya, kartu tersebut akan disusun secara linier pada sebuah meja dari kiri ke kanan, dan dari atas ke bawah. Pilih nilai kartu yang paling rendah, kemudian tukarkan posisi kartu ini dengan kartu yang terletak pada pojok kiri atas meja. Lalu cari kartu dengan nilai paling rendah diantara sisa kartu yang tersedia. Tukarkan kartu yang baru saja terpilih dengan kartu pada posisi kedua. Ulangi langkah – langkah tersebut hingga posisi kedua sebelum posisi terakhir dibandingkan dan dapat digeser dengan kartu yang bernilai lebih rendah.

Ide utama dari algoritma selection sort adalah memilih elemen dengan nilai paling rendah dan menukar elemen yang terpilih dengan elemen ke-i. Nilai dari i dimulai dari 1 ke n, dimana n adalah jumlah total elemen dikurangi 1.

Algoritma

    void selectionSort(Object array[], int startIdx, int endIdx) {
           int min;
           for (int i = startIdx; i < endIdx; i++) {
                 min = i;
                 for (int j = i + 1; j < endIdx; j++) {
               if (((Comparable)array[min]).compareTo(array[j])>0) {
                       min = j;
               }
           }
           swap(array[min], array[i]);
           }
    }

Contoh Selection Sort


Merge Sort

Sebelum mendalami algoritma merge sort, mari kita mengetahui garis besar dari konsep divide and conquer karena merge sort mengadaptasi pola tersebut.

Pola Divide  and Conquer

Beberapa algoritma mengimplementasikan konsep rekursif untuk menyelesaikan permasalahan. Permasalahan utama kemudian dipecah menjadi sub-masalah kemudian solusi dari sub-masalah akan membimbing menuju solusi permasalahan utama.

Pada setiap tingkatan rekursi, pola tersebut terdiri atas 3 langkah.
  1. Divide, Memilah masalah menjadi sub masalah
  2. Conquer, Selesaikan sub masalah tersebut secara rekursif. Jika sub-masalah tersebut cukup ringkas dan sederhana, pendekatan penyelesaian secara langsung akan lebih efektif
  3. Kombinasi, Mengkombinasikan solusi dari sub-masalah, yang akan membimbing menuju penyelesaian atas permasalahan utama.
Memahami Merge Sort


Seperti yang telah dijelaskan sebelumnya, Merge sort menggunakan pola divide and conquer. Dengan hal ini deskripsi dari algoritma dirumuskan dalam 3 langkah berpola divide-and-conquer. Berikut langkah kerja dari Merge sort:
  1. Divide, Memilah elemen – elemen dari rangkaian data menjadi dua bagian.
  2. Conquer setiap bagian dengan memanggil prosedur merge sort secara rekursif
  3. Kombinasi, Mengkombinasikan dua bagian tersebut secara rekursif untuk mendapatkan rangkaian data berurutan
Proses rekursi berhenti jika mencapai elemen dasar. Hal ini terjadi bilamana bagian yang akan diurutkan menyisakan tepat satu elemen. Sisa pengurutan satu elemen tersebut menandakan bahwa bagian tersebut telah terurut sesuai rangkaian.

Algoritma

     void mergeSort(Object array[], int startIdx, int endIdx) {
           if (array.length != 1) {
                 //Membagi rangkaian data, rightArr dan leftArr
                 mergeSort(leftArr, startIdx, midIdx);
                 mergeSort(rightArr, midIdx+1, endIdx);
                 combine(leftArr, rightArr);
           }
     }

Contoh Merge Sort

Rangkaian data :


Membagi rangkaian menjadi 2 bagian :
         LeftArr             RightArr


Membagi LeftArr menjadi 2 bagian :
     LeftArr               RightArr

Mengkombinasikan


Membagi RightArr menjadi 2 bagian :
LeftArr RightArr

Mengkombinasikan

Mengkombinasikan LeftArr dan RightArr



Materi lengkapnya, silakan download disini





SHARE

Rahmatang Lil Alamin

Hay sahabat Blogger. Terima kasih sudah berkunjung di blog saya.. Semoga bermanfaat yah :)

  • Image
  • Image
  • Image
  • Image
  • Image
    Blogger Comment
    Facebook Comment

0 komentar:

Posting Komentar

luvne.com ayeey.com cicicookies.com mbepp.com tipscantiknya.com kumpulanrumusnya.comnya.com