01/10/16

Sorting

Hay guys, mungkin di antara kalian pada gak tau kan apa itu Sorting? apa itu Bubble Sort (bukan Bubble yang di jual pop ice yyaa). yukk kita liat apa aja sihh pengertian Sorting

Sorting / bisa di bilang pengurutan adalah suatu proses menyusun kembali data yang sebelumnya telah disusun dengan suatu pola tertentu, sehingga tersusun secara teratur menurut aturan tertentu ( untuk data yang bertipe numerik atau karakter).

mungkin gak semua kita tau kalau sorting / pengurutan ada 2 macam yaitu :

  1. Ascending (urut naik) merupakan pengurutan dari angka yang nilainya lebih kecil kemudian menuju ke nilainya yang lebih besar.
  2.   Descending (urut turun) adalah sebaliknya, yaitu pengurutan dari nilainya yang lebih besar kemudian menuju ke nilainya yang lebih kecil.
 hhhmmmm mungkin belom begitu mengerti yaa.. apa yang di maksud, biar anda mengerti saya kasih contoh

Hasil yang di Sorting
  •    Ascending adalah 0   2   3   5   8   9 
  •   Descending adalah  9   8   5   3   2   0
nahh.. Sorting ada banyak macam-macam nya nihh, tentu nya ada 7 macam nihhh yaitu :

  1. Bubble Sort  
  2. Exchange Sort 
  3. Selection Sort
  4. Insertion Sort
  5. Shell Sort
  6. Merge Sort   
  7. Quick Sort  

1. Bubble Sort  

Memindahkan element sekarang dengan elemen berikutnya , jika elemen sekarang itu lebih besar / lebih kecil dari elemen berikutnya maka berpindah (bisa di bilang di tukar posisi).

Proses Bubble Sort
  • 1.       Ascending
  • Data yang paling awal dibandingkan dengan data berikutnya jika ternyata lebih besar maka di tukar.
  • Data yang paling akhir dibandingkan dengan data sebelumya jika ternyata lebih kecil maka di tukar.
  • 2.       Descending
  • Data yang paling awal dibandingkan dengan data berikutnya jika ternyata lebih kecil maka di tukar.
  • Data yang paling akhir dibandingkan dengan data sebelumya jika ternyata lebih besar maka di tukar.
 Contoh Bubble Sort
Ascending (Urutan Naik) 

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjY1cv5fiNgBod6mRKW-jLr5jQgSf34aAy2jXIzMpO3wiwpWNxmkc4zccBaT50Q70hXdPwqqE81fSnHPrFYxnyQ5mghpczV2nKHPex-3JrhF3WF0Hq0Qo8NctHuK_S2AQP1RXSHUuGMP3Pn/s1600/image.axd.jpg 
Sudah mangerti kahh anda dengan type Bubble Sort? yukk kita liat Pseudocode dari Bubble Sort :

# Sort an array a[0...n-1].
gaps = [701, 301, 132, 57, 23, 10, 4, 1]

# Start with the largest gap and work down to a gap of 1
[[foreach]] (gap in gaps)
{
    # Do a gapped insertion sort for this gap size.
    # The first gap elements a[0..gap-1] are already in gapped order
    # keep adding one more element until the entire array is gap sorted
    for (i = gap; i < n; i += 1)
    {
        # add a[i] to the elements that have been gap sorted
        # save a[i] in temp and make a hole at position i
        temp = a[i]
        # shift earlier gap-sorted elements up until the correct location for a[i] is found
        for (j = i; j >= gap and a[j - gap] > temp; j -= gap)
        {
            a[j] = a[j - gap]
        }
        # put temp (the original a[i]) in its correct location
        a[j] = temp
    }
}

2. Exchange Sort

Exchange sort itu sangat mirip dengan buble sort. Bahkan banyak yang mengatakan bahwa exchange sort sama dengan buble sort. Bedanya hanya jika bubble sort proses pertukarannya harus sistematis (dari awal atau dari belakang) Sedangkan exchange sort proses pertukaran hanya akan dilakukan jika diperlukan saja.
Proses Exchange Sort
1.       Ascending
  • Jika terdapat elemen sebelumnya lebih besar dari elemen berikutnya maka tukar.
  • Jika terdapat elemen sesudahnya lebih kecil dari elemen sebelumnya maka tukar.
2.       Descending
  •   Jika terdapat elemen sebelumnya lebih kecil dari elemen berikutnya maka tukar.
  •   Jika terdapat elemen sesudahnya lebih besar dari elemen sebelumnya maka tukar.


Contoh Exchange Sort
Ascending (Urutan Naik)

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-yIZXfSRGXNsHE_MeIR2knE2Tig6xBqf48CXII3mmQB9-d59-edWCIQnzux6yx7UmeknPr7vVrZolOfvlLKWRL92KfPNakijLZdaoeOVz91EHnXjU87ubQR7ndqr9KZWpJFRecw7hQ9UO/s1600/exchange2.jpg 
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZnWFyGwz1dUZBkcd6BZJaj4OH9wQOJqExQhDyCFLJBPYY7uKgi0VhI2HDTOPVtOKLLBXiQTkntv2XjsnlXoXQoHJQbVgJHMKP0FtQcvGJZyzooIdbeYBWbcl3q5f5_Kn_Xw2-ZZAVj6kS/s1600/exchange3.jpg 
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAIWCVdS3wH2riEUC1jSPElXFCBGH3R-OOxpUz2u6XUDgXXMeoTWJrqPwhgrY4QutvLQZ_uI_Gqy1stcboA56rQQ7aihblz3mp-iM5NpygBunLEwGMs3Qvmptnfwrxp___mrxxMptMfvee/s1600/exchange4.jpg 

Saya rasa anda pahan maksud dari Exchange sort? yukk kita liat Pseudocode dari Exchange sort :

void ExchangeSort(apvector <int> &num)
{
     int i, j;
     int temp;   // holding variable
     int numLength = num.length( ); 
     for (i=0; i< (numLength -1); i++)    // element to be compared
    {
          for(j = (i+1); j < numLength; j++)   // rest of the elements
         {
                if (num[i] < num[j])          // descending order
               {
                        temp= num[i];          // swap
                        num[i] = num[j];
                        num[j] = temp;
               }
          }
     }
     return;
}
 
3. Selection Sort

Memindahkan elemen dengan cara membandingkan elemen sekarang dengan elemen yang berikutnya sampai dengan elemen terakhir . Jika ditemukan elemen lain yang lebih kecil / lebih besar dari elemen sekarang maka dicatat posisinya dan kemudian ditukar dan begitu seterusnya.                 
Proses Selection Sort
1.       Ascending
  •   Elemen yang paling besar diletakkan di akhir.
  •   Elemen yang paling kecil diletakkan di awal.
2.       Descending
  •   Elemen yang paling kecil diletakkan di akhir.
  •   Elemen yang paling besar diletakkan di awal.
Contoh Selection Sort
Ascending (Urutan Naik)
   Insertion Sort

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigHyPkxS1bfqpvXxSr2WqhZXZwDImraWajNDDsM5_xf2p6uQHJInNoayNMUL16kD7KvAzjjuiVU6E7l6Y2YCmtTHReLkJx1aa28XHvv7fTuBtK4OJw5m4a57VwWztv89HzYrE8Sgg2ZR6T/s1600/selection%2520%2520sort_thumb4.jpg
Yukkk kita liat  Pseudocode dari Selection Sort :

procedure selection sort 
   list  : array of items
   n     : size of list

   for i = 1 to n - 1
   /* set current element as minimum*/
      min = i    
  
      /* check the element to be minimum */

      for j = i+1 to n 
         if list[j] < list[min] then
            min = j;
         end if
      end for

      /* swap the minimum element with the current element*/
      if indexMin != i  then
         swap list[min] and list[i]
      end if

   end for
 
end procedure

4.  Insertion Sort

Pengurutan yang dilakukan dengan cara membandingkan dengan data ke-2 sampai data terakhir. Jika ditemukan data yang lebih kecil atau lebih besar maka data tersebut disisipkan kedepan sesuai posisi yang seharusnya.

Contoh Insertion Sort
Ascending (Urutan Naik)





https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikW0q0esVZXG06kTongDACleKNFpgs0bMP-86OgzfemBT-vJFzxRPt7HeipbCPH_ilWCG7r2F89S9B7ggRJLe91HkeK_s8GNZSxM8ewnhDUhtaplS3ZblUYmL9TQB3mVXvm2Z8TxbJENh6/s1600/insertion+++sort_thumb%5B1%5D.jpg
 Nihh saya kasih tau Pseudocode dari type Insertion Sort :

procedure insertionSort( A : array of items )
   int holePosition
   int valueToInsert
 
   for i = 1 to length(A) inclusive do:
 
      /* select value to be inserted */
      valueToInsert = A[i]
      holePosition = i
      
      /*locate hole position for the element to be inserted */
  
      while holePosition > 0 and A[holePosition-1] > valueToInsert do:
         A[holePosition] = A[holePosition-1]
         holePosition = holePosition -1
      end while
  
      /* insert the number at hole position */
      A[holePosition] = valueToInsert
      
   end for
 
end procedure


5. Shell Sort
Merupakan proses pengurutan data yang sebelumnya acak menjadi data yang terurut dengan cara menentukan jarak antar elemen yang akan dibandingkan.
Contoh  Shell  Sort
Ascending (Urutan Naik)
Hasil gambar untuk Shell Sort 
Boleh di coba guys Pseudocode dari type Shell Sort

procedure shellSort()
    A : array of items 
 
   /* calculate interval*/
   while interval < A.length /3 do:
      interval = interval * 3 + 1     
   end while
   
   while interval > 0 do:

      for outer = interval; outer < A.length; outer ++ do:

      /* select value to be inserted */
      valueToInsert = A[outer]
      inner = outer;

         /*shift element towards right*/
         while inner > interval -1 && A[inner - interval] >= valueToInsert do:
            A[inner] = A[inner - interval]
            inner = inner - interval
         end while

      /* insert the number at hole position */
      A[inner] = valueToInsert

      end for

   /* calculate interval*/
   interval = (interval -1) /3;   

   end while
   
end procedure

6. Merge Sort
Merupakan proses pengurutan data yang menggunakan merging dua buah vector. Pada proses merge sort, data dibuat sepasang-sepasang, yang terdiri dari dua elemen. Jika N ganjil, maka ada satu vector yang terdiri dari 1 elemen. Lalu kemudian data tersebut di merging sampai terurut.
Contoh Merge Sort
Ascending (Urutan Naik)
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRwyFaHTu9r5bwsrLsuB-V7YxLkBr6WeupgfLypmcieMKLfJQXp1pILjLg1MA1oQ9tdqSRMY6jbsj75U4XEu-X6N3t18oyWxomGUaQDbpTU94fu2aZK7YaqjxaLG4Xer0PHiEEtS9kCpuB/s1600/sort.png
Pseudocode dari type Merge Sort :

procedure mergesort( var a as array )
   if ( n == 1 ) return a

   var l1 as array = a[0] ... a[n/2]
   var l2 as array = a[n/2+1] ... a[n]

   l1 = mergesort( l1 )
   l2 = mergesort( l2 )

   return merge( l1, l2 )
end procedure

procedure merge( var a as array, var b as array )

   var c as array

   while ( a and b have elements )
      if ( a[0] > b[0] )
         add b[0] to the end of c
         remove b[0] from b
      else
         add a[0] to the end of c
         remove a[0] from a
      end if
   end while
   
   while ( a has elements )
      add a[0] to the end of c
      remove a[0] from a
   end while
   
   while ( b has elements )
      add b[0] to the end of c
      remove b[0] from b
   end while
   
   return c
 
end procedure

7. Quick Sort
Merupakan proses penyusunan elemen yang membandingkan suatu elemen (pivot) denan elemen yang lain, dan menyusunnya sedemikian rupa sehingga elemen –elemen lain yang lebih kecil dari pivot terletak disebelah kiri pivot. Dan elemen yang lebih besar dari pivot terletak disebelah kanan pivot.
Dengan demikian akan terbentuk dua sublist, yang terletak disebelah kanan dan kiri pivot. Lalu pada sublist kiri dan kanan itu kita anggap sebuah list baru, dan kita kerjakan proses yang sama seperti yang sebelumnya. Demikian seterusnya sampai tidak terdapat sublist lagi.
Contoh Quick Sort
Ascending (Urutan Naik)
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMK9J29xpZW4u5HPFAB4aPmGbkmuv1skgqGGpMveZQtLhKEC0rG0Jt9qNpvmKR78OjVkBj0McTpbouIAiK4zoclpebsK5s1HHmAchdtKgl3xyWerrzODCbekNd2PxKk0AC22ig-HQKcRDU/s1600/1.jpg 
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVbF7M8tPdGANhT8R8SGYc1O3e-nQr6B7t423sTVT_00K-XA4KT_UYRuSz0Ys2DqnP5mLtzDFjF1NtH4WS_ZOdjTXkutknZv6MahcAhqi_6315WYmezR4B29zsaPN-64RGtL5CaP3W53nZ/s1600/2.jpg https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZlUDb9UNaOSTzMfVRi7GMfa-TqaVzaJxW14hBioVBPe_hmWHY1RhfkV_w5TZ46Nlxyakq5Pp2zx1G0S4RgExQzJYyB_yuKVOCeRTuIFjKBoYiKIIJnMRR51WgLjhJD5V10SlIQ1BePO5P/s1600/3.jpg
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwDWMxNtdfXBXnogNBpN2_9YO-uz23nBwBJp3T6_m-SdLbmCEyKxhAuGhyphenhyphen_VSmBiOOP99N4SlWFi3PdJi7PWYE7eMPOjpWdd29tO_NhnTeQ2VLxbvlu20yv8_C6b8NlrVZHlYaHJZaEsYu/s1600/4.jpg
 https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwkxe3qAd8_DAscheaZtJEpNPomdCj33ntxfj8_2YVFtr0eLE3EwF2IuyFtnSQyUGGfnNaID6tl5wPtCSjSCs4ydrr9WzVNQmLWwDbDzycMTzc3myIQRocuVy4MsLPrD_l0Kl3AjFXkKUi/s1600/5.jpg
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEij0f1a3XD3v7wpRHBw2QyfqEyFpW_Q38tXI5HRBgMepEnv4IKJU0kasxNqisgB3kMpIPofbaZ9R_9Il5FfOo6P02CdFsGG33tEtSduNenrAI1_2bTc_mKvf10M9AukPcdqY9vbdGP5rjGs/s1600/6.jpg 
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivL94GelsDyoDVTA7ARnJ_T779o-usLGWrVlEZV67CDRgVEanHoqJaDLyUx7VIWxlQHYCZEq2nHnAPSB6csIoGiqyF6_wEo1h-mtr4OpU4Bigs2RVqeDKeQb6J4v8s_CYafJNiHYCacHr-/s1600/7.jpg
Pada belom tau kan Pseudocode dari type Quick Sort?? boleh di coba guys Pseudocode nya :

function partitionFunc(left, right, pivot)
   leftPointer = left -1
   rightPointer = right

   while True do
      while A[++leftPointer] < pivot do
         //do-nothing            
      end while
  
      while rightPointer > 0 && A[--rightPointer] > pivot do
         //do-nothing         
      end while
  
      if leftPointer >= rightPointer
         break
      else                
         swap leftPointer,rightPointer
      end if
  
   end while 
 
   swap leftPointer,right
   return leftPointer
 
end function
 
 sumber :Disini

0 comments:

Posting Komentar