Rabu, 25 September 2013

ALGORITMA SORTING


Jika kita memiliki 5 buah bilangan acak, bagaimana cara kita mengubahnya menjadi bilangan yang berurutan? Mudah sekali. Kita bisa membuat programnya dengan beberapa cara. Diantaranya, bubble sort, selection sort, shell sort dan quick sort.

1.       Bubble Sort

Mengapa proses ini dinamakan ‘bubble’? Karena proses pengurutan yang dilakukan adalah secara berangsur-angsur berpindah ke posisi yang tepat , seperti gelembung. Cara pengurutan dengan Bubble Sort dilakukan dengan membandingkan bilangan sekarang dengan bilangan berikutnya. Apabila bilangan sekarang  lebih besar dari bilangan berikutnya maka elemen tersebut ditukar (untuk pengurutan ascending). Sedangkan jika elemen sekarang lebih kecil daripada elemen berikutnya, maka kedua elemen  tersebut ditukar (untuk pengurutan descending).

Contoh:

Proses 1 :
22 10 15 3 8 2
22 10 15 3 2 8
22 10 15 2 3 8
22 10 2 15 3 8
22 10 2 15 3 8
22 2 10 15 3 8
2 22 10 15 3 8

Pengecekan dimulai dari data yang paling akhir, kemudian dibandingkan dengan data di depannya,jika data didepannya lebih besar maka akan di tukar.

Proses 2:
2 22 10 15 3 8
2 22 10 15 3 8
2 22 10 3 15 8
2 22 3 10 15 8
2 3 22 10 15 8

pengecekan dilakukan sampai dengan data ke-2 karena data pertama pasti sudah paling kecil.

Proses 3 :
2 3 22 10 15 8
2 3 22 10 8 15
2 3 22 8 10 15
2 3 8 22 10 15

Proses 4 :
2 3 8 22 10 15
2 3 8 22 15 10
2 3 8 15 22 10

Proses 5 :
2 3 8 15 22 10
2 3 8 15 10 22

Pengurutan berhenti.
Jika  dituangkan dalam program dan diagram flowchart menjadi:

Procedure Bubble(Var Temp : Data; N : Integer);


Var I,j : Integer;
Begin
     For i:=2 To N Do
            For J:=N DownTo i Do
                     If Temp[j] < Temp[j-1] Then        
                      SWAP(Temp[j], Temp[j-1]);
End;














2.       Selection Sort

Pengurutan dengan cara Selection Sort berdasarkan atas pencarian nilai terkecil dari seluruh bilangan, lalu di tukar dengan bilangan pertama. Pada langkah kedua, data terkecil dicari mulai dari data kedua, lalu ditukar dengan bilangan kedua, begitu seterusnya sampai semua data terurut.
Dalam flowchart: 


 .
Var i,j,sem: integer;
Begin 
            For I:=1 To N-1 Do 
                Begin 
                     sem:=i; 
                     For j:=i+1 To N Do 
                     If Bilangan[sem] > Bilangan[j] Then sem:=j; 
                     SWAP(bilangan[i], bilangan[sem]); 
                 End; 
      End; 










3.       Shell Sort

Pada metode ini, digunakan jarak tertentu antara dua elemen  yang dibandingkan dan ditukarkan. Secara singkat metode ini dijelaskan sebagai berikut. Pada langkah pertama, kita ambil elemen pertama dan kita bandingkan dan kita bandingkan dengan elemen pada jarak tertentu (biasanya setengah dari jumlah data) dari elemen pertama tersebut. Kemudian elemen kedua kita bandingkan dengan elemen lain dengan jarak yang sama seperti jarak yang sama seperti diatas. Demikian seterusnya sampai seluruh elemen dibandingkan. Pada langkah kedua proses diulang dengan langkah yang lebih kecil, pada langkah ketiga jarak tersebut diperkecil lagi seluruh proses dihentikan jika jarak sudah kurang dari satu.

Untuk lebih jelasnya, perhatikan proses shell sort dalam procedure pascal berikut :

Procedure Shell(Var Temp : Data; JmlData : Integer); 
Var I,J, Jarak : Integer; 
        Begin 
             Jarak := JmlData Div 2; 
              While Jarak > 0 Do 
                    Begin 
                        For I:=1 To JmlData-Jarak Do 
                             Begin 
                                 J := I + Jarak; 
                                 If Temp[I] > Temp[J] Then  
                                 SWAP(Temp[I], Temp[Lok]); 
                             End; 
                             Jarak := Jarak Div 2; 
                    End; 
          End;

4.       Quick Sort

Secara garis besar metode ini dijelaskan sebagai berikut. Misalnya kita ingin mengurutkan data A yang membunyai N elemen. Kita pilih sembarang elemen dari data tersebut, biasanya elemen pertama, misalnya X. Kemudian semua elemen tersebut disusun dengan menempatkan X pada posisi J sedemikian rupa sehingga elemen ke 1 sampai ke J-1 mempuyai nilai lebih kecil dari X. Sampai berikutnya diulang untuk  setiap sub data.

Dalam Procedure Pascal :

Procedure Quick(Var Temp : Data; Awal, Akhir : Integer); 
      Var I,J : Integer; 
       Procedure ATUR; 
       Begin 
                   I:=Awal +1; 
                   J:= Akhir; 
                    While Temp[I] < Temp[Awal] Do Inc(I);
                   While Temp[J] > Temp[Awal] Do Dec(J); 
                   While I < J Do 
                         Begin 
                                SWAP(Temp[I], Temp[J]); 
                                While Temp[I] < Temp[Awal] Do Inc(I); 
                                While Temp[J] > Temp[Awal] Do Dec(J); 
                         End; 
                   SWAP(Temp[Awal], Temp[J]); 
       End; 
                 
      Begin 
                  If Awal < Akhir Then 
                         Begin 
                              ATUR; 
                              Quick(Temp, Awal, J-1); 
                                            Quick(Temp,J+1,Akhir);
                                       End; 
     End;

Selamat Mencoba^^

Tidak ada komentar:

Posting Komentar