Abstract Windowing Toolkit

 dan Swing


Tanpa  mempelajari  tentang  grapichal  user  interface  (GUI)  API,  Anda  masih  tetap  bisa 

membuat  suatu  program.  Tetapi,  program  Anda  akan  kelihatan  tidak  menarik  dan  tidak 

nyaman  digunakan  bagi  para  user.  Memiliki  GUI  yang  baik  dapat  memberi  efek  pada 

penggunaan aplikasi. Java menyediakan banyak  tool  seperti  Abstract Windowing Toolkit  dan 

Swing untuk mengembangkan aplikasi GUI yang interaktif.

Setelah menyelesaikan bab ini, Anda diharapkan untuk :

1. Memahami persamaan dan perbedaan antara AWT dan Swing

2. Perbedaan antara komponen dan kontainer.

3. Mendesain aplikasi GUI menggunakan AWT.

4. Mendesain aplikasi GUI menggunakan Swing.

5. Menjelaskan tentang flow layout, border layout, dan grid layout dalam komponen GUI

6. Membuat tampilan yang komplek dalam mendesain aplikasi GUI.

7.2 Abstract Windowing Toolkit (AWT) vs. Swing

The Java Foundation Class  (JFC), merupakan bagian penting dari Java SDK, yang termasuk 

dalam koleksi dari API dimana dapat mempermudah pengembangan aplikasi JAVA GUI. JFC 

termasuk diantara 5 bagian utama dari API yaitu AWT dan Swing. Tiga bagian yang lainnya 

dari API adalah Java2D, Accessibility, dan Drag dan Drop. Semua itu membantu pengembang 

dalam mendesain dan mengimplementasikan aplikasi visual yang lebih baik.

AWT dan Swing menyediakan komponen GUI yang dapat digunakan dalam membuat aplikasi 

Java dan applet. Anda akan mempelajari applet pada bab berikutnya. Tidak seperti beberapa 

komponen  AWT yang  menggunakan  native  code,  keseluruhan  Swing  ditulis  menggunakan 

bahasa pemrograman Java. Swing menyediakan  implementasi platform-independent dimana 

aplikasi  yang dikembangkan dengan platform yang berbeda dapat  memiliki  tampilan yang 

sama. Begitu juga dengan AWT menjamin tampilan look and feel pada aplikasi yang dijalankan 

pada dua mesin yang berbeda menjadi terlihat sama. Swing API dibangun dari beberapa API 

yang mengimplementasikan beberapa jenis bagian dari AWT.  Kesimpulannya, komponen AWT 

dapat digunakan dengan komponen Swing.

Pengenalan Pemrograman  2  1


7.3 Komponen GUI pada AWT

7.3.1 Window Classes Fundamental

Dalam mengembangkan aplikasi GUI, komponen GUI seperti tombol atau textfield diletakkan 

di dalam kontainer. Berikut ini adalah daftar dari beberapa kelas penting pada kontainer yang 

telah disediakan oleh AWT.

AWT Class Description

Komponen Abstract  Class  untuk  objek  yang  dapat  ditampilkan  pada  console  dan 

berinteraksi dengang user. Bagian utama dari semua kelas AWT.

Kontainer Abstract  Subclass  dari  Component  Class.  Sebuah  komponen  yang  dapat 

menampung komponen yang lainnya.

Panel Turunan  dari  Container  Class.  Sebuah  frame  atau  window  tanpa  titlebar, 

menubar tidak termasuk border. Superclass dari applet class.

Window Turunan  dari  Container  class.  Top  level  window,  dimana  berarti  tidak  bisa 

dimasukkan dalam objek yang lainnya.Tidak memiliki border dan menubar.

Frame Turunan  dari  window  class.  Window  dengan  judul,  menubar,  border  dan 

pengatur  ukuran  di  pojok.  Memiliki  empat  konstruktor  ,  dua  diantaranya 

memiliki penulisan seperti dibawah ini :

Frame()

Frame(String title)

Tabel 1.2.1: Kelas kontainer AWT

Untuk mengatur ukuran window, menggunakan metode setSize.void setSize(int width, int height) 

mengubah ukuran komponen ini dengan width dan height sebagai parameter.void setSize(Dimension d) 

mengubah ukuran dengan d.width dan d.height berdasar pada spesifikasi Dimension d.

Default dari window adalah not visible atau tak tampak hingga Anda mengatur visibility 

menjadi true. Inilah syntax untuk metode setVisible.void setVisible(boolean b)

Dalam mendesain aplikasi GUI, Object  Frame  selalu digunakan. Dibawah ini  adalah contoh 

bagaimana membuat sebuah aplikasi.

import java.awt.*;

public class SampleFrame extends Frame {

Pengenalan Pemrograman  2  2


   public static void main(String args[]) {

      SampleFrame sf = new SampleFrame();

      sf.setSize(100, 100); //Coba hilangkan baris ini

      sf.setVisible(true); //Coba hilangkan baris ini

   }

}

perhatikan bahwa tombol tutup pada frame tidak akan bekerja karena tidak ada mekanisme 

event handling yang ditambahkan di dalam aplikasi. Anda akan belajar tentang event handling 

pada modul selanjutnya.

7.3.2 Grafik

Beberapa  metode  grafik  ditemukan  dalam  Graphic  class.  Dibawah  ini  adalah  daftar  dari 

beberapa metode.

drawLine() drawPolyline() setColor()

fillRect() drawPolygon() getFont()

drawRect() fillPolygon() setFont()

clearRect() getColor() drawString()

Tabel 1.2.2a: Beberapa metode dari kelas Graphics

Hubungan dari kelas ini adalah Color class, dimana memiliki tiga konstruktor.

Constructor Format Description

Color(int r, int g, int b) Nilai integer 0 - 255.

Color(float r, float g, float b) Nilai float 0.0 - 1.0.

Color(int rgbValue) Panjang nilai : 0 ke 224-1 (hitam ke putih). 

Red: bits 16-23

Green: bits 8-15

Blue: bits 0-7

Dibawah ini adalah contoh program yang menggunakan beberapa metode di dalam  Graphic 

class. 

import java.awt.*;

public class GraphicPanel extends Panel {

   GraphicPanel() {

      setBackground(Color.black); //constant in Color class

   }

   public void paint(Graphics g) {

      g.setColor(new Color(0,255,0)); //green

      g.setFont(new Font("Helvetica",Font.PLAIN,16));

      g.drawString("Hello GUI World!", 30, 100);

      g.setColor(new Color(1.0f,0,0)); //red

Pengenalan Pemrograman  2  3


      g.fillRect(30, 100, 150, 10);

   }

   public static void main(String args[]) {

      Frame f = new Frame("Testing Graphics Panel");

      GraphicPanel gp = new GraphicPanel();

      f.add(gp);

      f.setSize(600, 300);

      f.setVisible(true);

   }

}

Agar panel dapat terlihat atau visible, dia harus diletakkan didalam window yang dapat terlihat 

seperti sebuah frame.

7.3.3 Beberapa komponen AWT

Berikut ini adalah daftar dari kontrol AWT. Kontrol adalah komponen seperti tombol atau 

textfield yang mengijinkan user untuk berinteraksi dengan aplikasi GUI. Berikut ini semua 

subkelas dari Components class.

Label Button Choice

TextField Checkbox List

TextArea CheckboxGroup Scrollbar

Tabel 1.2.3: Komponen AWT

Berikut  adalah aplikasi  membuat  sebuah frame dengan kontrol  yang telah  dimasukkan  di 

dalamnya.

import java.awt.*;

class FrameWControls extends Frame {

   public static void main(String args[]) {

      FrameWControls fwc = new  FrameWControls();

      fwc.setLayout(new FlowLayout());  //more on this later

      fwc.setSize(600, 600);

      fwc.add(new Button("Test Me!"));

      fwc.add(new Label("Labe"));

      fwc.add(new TextField());

      CheckboxGroup cbg = new CheckboxGroup();

      fwc.add(new Checkbox("chk1", cbg, true));

      fwc.add(new Checkbox("chk2", cbg, false));

      fwc.add(new Checkbox("chk3", cbg, false));

      List list = new List(3, false);

      list.add("MTV");

      list.add("V");

      fwc.add(list);

      Choice chooser = new Choice();

      chooser.add("Avril");

      chooser.add("Monica");

Pengenalan Pemrograman  2  4


      chooser.add("Britney");

      fwc.add(chooser);

      fwc.add(new Scrollbar());

      fwc.setVisible(true);

   }

}

7.4 Layout Manager

Posisi  dan  ukuran  suatu  komponen  ditentukan  oleh  layout  manager.  Layout  manager 

mengatur tampilan dari komponen di dalam kontainer. Berikut ini beberapa layout manager 

yang terdapat di dalam Java.

1.FlowLayout

2.BorderLayout

3.GridLayout

4.GridBagLayout

5.CardLayout

Layout manager dapat diatur menggunakan metode setLayout dari Container class. Metode ini 

dapat ditulis sebagai berikut.

void setLayout(LayoutManager mgr) 

Jika Anda memilih untuk tidak menggunakan layout manager, Anda dapat mengisi null sebagai 

argumen untuk metode ini.  Tetapi selanjutnya,  Anda akan mengatur posisi  elemen secara 

manual dengan menggunakan metode setBounds dari Components class.

public void setBounds(int x, int y, int width, int height)

Metode ini  mengatur posisi  berdasarkan pada argumen x dan y,  dan ukuran berdasarkan 

argumen width dan height. Hal ini akan cukup menyulitkan dan membosankan untuk aplikasi 

jika Anda memiliki beberapa objek komponen didalam objek kontainer. Anda akan memanggil 

metode ini untuk setiap komponen.

7.4.1 FlowLayout Manager

FlowLayout Manager adalah default  manager untuk  Panel class dan subkelasnya, termasuk 

applet class. Cara meletakkan komponen dari FlowLayout Manager dimulai dari kiri ke kanan 

dan  dari  atas  ke  bawah,  dimulai  dari  pojok  kiri  atas.  Seperti  pada  saat  Anda  mengetik 

menggunakan editor  kata  pada umumnya.  Berikut  adalah bagaimana FlowLayout Manager 

bekerja, dimana memiliki tiga konstruktor seperti daftar di bawah ini.

FlowLayout Constructors

FlowLayout() 

Membuat objek baru FlowLayout dengan posisi di tengah dan lima unit horizontal dan vertikal 

gap dimasukkan pada komponen sebagai default.

FlowLayout(int align) 

Pengenalan Pemrograman  2  5


FlowLayout Constructors

Membuat objek baru FlowLayout dengan posisi spesifik dan lima unit horizontal dan vertikal 

gap dimasukkan pada komponen sebagai default.

FlowLayout(int align, int hgap, int vgap) 

Membuat objek baru FlowLayout dengan argumen pertama sebagai posisi pada komponen 

dan hgap untuk horizontal dan vgap untuk vertikal pada komponen

Tabel 1.3.1: Konstruktor FlowLayout

Gap dapat  dikatakan sebagai  jarak  antara komponen dan biasanya diukur  dengan satuan 

pixel. Posisi argumen mengikuti penulisan sebagai berikut :

1.FlowLayout.LEFT

2.FlowLayout.CENTER

3.FlowLayout.RIGHT

Bagaimanakah output dari program berikut?

import java.awt.*;

class FlowLayoutDemo extends Frame {

   public static void main(String args[]) {

      FlowLayoutDemo fld = new FlowLayoutDemo();

      fld.setLayout(new FlowLayout(FlowLayout.RIGHT, 10, 10));

      fld.add(new Button("ONE"));

      fld.add(new Button("TWO"));

      fld.add(new Button("THREE"));

      fld.setSize(100, 100);

      fld.setVisible(true);

   }

}

Gambar berikut adalah contoh dari hasil yang berjalan pada platform Window.

Tabel 13.1: Contoh hasil dalam window

Pengenalan Pemrograman  2  6


7.4.2.BorderLayout Manager

BorderLayout  membagi  kontainer  menjadi  lima  bagian  diantaranya  utara,  selatan,  timur, 

barat, dan tengah. Setiap komponen dimasukkan ke dalam region yang spesifik. Region utara 

dan selatan membentuk jalur horizontal sedangkan region timur dan barat membentuk jalur 

vertikal. Dan region tengah berada pada perpotongan jalur horizontal dan vertikal. Tampilan 

ini adalah bersifat default untuk objek  Window, termasuk objek dari subkelas  Window yaitu 

tipe Frame dan Dialog.

Konstruktor BorderLayout 

BorderLayout() 

Membuat objek BorderLayout baru tanpa spasi yang diaplikasikan diantara komponen yang 

berbeda.

BorderLayout(int hgap, int vgap) 

Membuat objek BorderLayout baru dengan spasi unit hgap horizontal dan unit vgap vertikal 

yang diaplikasikan diantara komponen yang berbeda.

Tabel 1.3.2: Konstruktor BorderLayout

Seperti pada FlowLayout Manager, parameter  hgap  dan  vgap  disini juga menjelaskan jarak 

antara komponen dengan kontainer.

Untuk  menambahkan  komponen  kedalam  region  yang  spesifik,  gunakan  metode 

menambahkan dan melewatkan dua argumen yaitu : komponen yang ingin dimasukkan ke 

dalam  region  dan  region  mana  yang  ingin  dipakai  untuk  meletakkan  komponen.  Perlu 

diperhatikan  bahwa  hanya  satu  komponen  yang  dapat  dimasukkan  dalam  satu  region. 

Menambahkan lebih dari satu komponen pada kontainer yang bersangkutan, maka komponen 

yang terakhir ditambahkan yang akan ditampilkan. Berikut ini adalah daftar dari kelima region.

1. BorderLayout.NORTH

2. BorderLayout.SOUTH

3. BorderLayout.EAST

4. BorderLayout.WEST

5. BorderLayout.CENTER

Berikut ini adalah contoh program yang menunjukkan bagaimana BorderLayout bekerja.

import java.awt.*;

class BorderLayoutDemo extends Frame {

   public static void main(String args[]) {

      BorderLayoutDemo bld = new BorderLayoutDemo();

      bld.setLayout(new BorderLayout(10, 10)); //may remove

      bld.add(new Button("NORTH"), BorderLayout.NORTH);

      bld.add(new Button("SOUTH"), BorderLayout.SOUTH);

      bld.add(new Button("EAST"), BorderLayout.EAST);

      bld.add(new Button("WEST"), BorderLayout.WEST);

      bld.add(new Button("CENTER"), BorderLayout.CENTER);

      bld.setSize(200, 200);

      bld.setVisible(true);

Pengenalan Pemrograman  2  7


   }

}

Berikut ini adalah hasil dari contoh program tersebut. Gambar kedua menunjukkan efek dari 

mengubah bentuk dari frame.

Gambar 1.3.2: hasil contoh program

7.4.3 GridLayout Manager

Dengan GridLayout manager, komponen juga diposisikan dari kiri ke kanan dan dari atas ke 

bawah seperti pada  FlowLayout manager. GridLayout manager membagi kontainer menjadi 

baris dan kolom. Semua region memiliki ukuran yang sama. Hal tersebut tidak mempedulikan 

ukuran sebenarnya dari komponen.

Berikut ini adalah daftar dari konstruktor untuk GridLayout class.

Konstruktor GridLayout

GridLayout()

Membuat objek GridLayout baru dengan satu baris dan satu kolom sebagai default

GridLayout(int rows, int cols) 

Membuat objek GridLayout baru dengan jumlah baris dan kolom sesuai dengan keinginan

GridLayout(int rows, int cols, int hgap, int vgap) 

Membuat objek GridLayout baru dengan jumlah baris dan kolom yang ditentukan. Unit spasi 

hgap horizontal dan vgap vertikal diaplikasikan ke dalam komponen.

Tabel 1.3.3: Konstruktor GridLayout

Cobalah program ini.

import java.awt.*;

class GridLayoutDemo extends Frame {

   public static void main(String args[]) {

      GridLayoutDemo gld = new GridLayoutDemo();

Pengenalan Pemrograman  2  8


      gld.setLayout(new GridLayout(2, 3, 4, 4));

      gld.add(new Button("ONE"));

      gld.add(new Button("TWO"));

      gld.add(new Button("THREE"));

      gld.add(new Button("FOUR"));

      gld.add(new Button("FIVE"));

      gld.setSize(200, 200);

      gld.setVisible(true);

   }

}

Berikut ini adalah hasil dari program.

Gambar 1.3.3: hasil contoh program

7.4.4 Panel dan Tampilan kompleks

Untuk membuat tampilan yang lebih komplek, Anda dapat menggabungkan layout manager 

yang  berbeda  dengan  menggunakan  panel.  Ingatlah  bahwa  panel  adalah  kontainer  dan 

komponen pada saat yang sama. Anda dapat memasukkan komponen ke dalam panel dan 

kemudian menambahkan panel ke dalam region yang Anda inginkan di dalam kontainer.

Pengenalan Pemrograman  2  9


Perhatikan teknik yang digunakan pada contoh berikut.

import java.awt.*;

class ComplexLayout extends Frame {

   public static void main(String args[]) {

      ComplexLayout cl = new ComplexLayout();

      Panel panelNorth = new Panel();

      Panel panelCenter = new Panel();

      Panel panelSouth = new Panel();

      /* North Panel */

      //Panels use FlowLayout by default

      panelNorth.add(new Button("ONE"));

      panelNorth.add(new Button("TWO"));

      panelNorth.add(new Button("THREE"));

      /* Center Panel */

      panelCenter.setLayout(new GridLayout(4,4));

      panelCenter.add(new TextField("1st"));

      panelCenter.add(new TextField("2nd"));

      panelCenter.add(new TextField("3rd"));

      panelCenter.add(new TextField("4th"));

      /* South Panel */

      panelSouth.setLayout(new BorderLayout());

      panelSouth.add(new Checkbox("Choose me!"), 

                                         BorderLayout.CENTER);

      panelSouth.add(new Checkbox("I'm here!"), 

                                           BorderLayout.EAST);

      panelSouth.add(new Checkbox("Pick me!"), 

                                           BorderLayout.WEST);

      /* Adding the Panels to the Frame container */

      //Frames use BorderLayout by default

      cl.add(panelNorth, BorderLayout.NORTH);

      cl.add(panelCenter, BorderLayout.CENTER);

      cl.add(panelSouth, BorderLayout.SOUTH);

      cl.setSize(300,300);

      cl.setVisible(true);

   }

}

Pengenalan Pemrograman  2  10


Berikut ini adalah hasil dari program.

Gambar 1.3.4: Hasil dari contoh program

7.5 Komponen Swing

Seperti pada package AWT, package dari Swing menyediakan banyak kelas untuk membuat 

aplikasi  GUI.  Package  tersebut  dapat  ditemukan  di  javax.swing.  Perbedaan  utama  antara 

keduanya adalah komponen Swing ditulis  menyeluruh menggunakan Java mengingat  yang 

belakangan  tidak.  Kesimpulannya,  program  GUI  ditulis  menggunakan  banyak  kelas  dari 

package Swing yang mempunyai tampilan look and feel yang sama meski dijalankan pada 

beda paltform. Lebih dari itu, Swing menyediakan komponen yang lebih menarik seperti color 

chooser dan option pane.

Nama dari komponen GUI milik Swing hampir sama persis dengan komponen GUI milik AWT. 

Perbedaan jelas terdapat pada penamaan komponen. Pada dasarnya, nama komponen Swing 

sama dengan nama komponen AWT tetapi dengan tambahan huruf J pada prefixnya. Sebagai 

contoh,  satu  komponen  dalam  AWT  adalah  button  class.  Sedangkan  pada  Swing,  nama 

komponen tersebut menjadi Jbutton class. Berikut adalah daftar dari komponen Swing.

Komponen 

Swing 

Penjelasan

JComponent Kelas induk untuk semua komponen Swing, tidak termasuk top-level 

kontainer

JButton Tombol “push”. Korespondesi pada button class dalam package AWT

JCheckBox Item yang dapat dipilih atau tidak oleh pengguna. Korespondensi pada 

checkbox class dalam package AWT

Pengenalan Pemrograman  2  11


Komponen 

Swing 

Penjelasan

JFileChooser Mengijinkan pengguna untuk memilih sebuah file. Korespondensi pada 

filechooser class dalam package AWT

JTextField Mengijinkan untuk mengedit text satu baris. Korespondensi pada textfield 

class dalam package AWT.

JFrame Turunan dan korepondensi pada frame class dalam package AWT tetapi 

keduanya sedikit tidak cocok dalam kaitannya dengan menambahkan 

komponen pada kontainer. Perlu mendapatkan content pane yang terbaru 

sebelum menambah sebuah komponen.

JPanel Turunan Jcomponent. Kontainer class sederhana tetapi bukan top-level. 

Korespondensi pada panel class dalam package AWT.

JApplet Turunan dan korepondensi ke Applet class dalam package AWT. Juga sedikit 

tidak cocok dengan applet class dalam kaitannya dengan menambahkan 

komponen pada kontainer

JOptionPane Turunan Jcomponent. Disediakan untuk mempermudah menampilkan pop-

up kotak dialog.

JDialog Turunan dan korespondensi pada dialog class dalam package AWT. Biasanya 

digunakan untuk menginformasikan sesuatu kepada pengguna atau prompt 

pengguna untuk input.

JColorChooser Turunan Jcomponent. Mengijinkan pengguna untuk memilih warna

Tabel 1.4: Beberapa komponen Swing

Untuk daftar yang lengkap dari komponen Swing, Anda dapat melihatnya di dokumentasi API.

7.5.1 Setting Up Top-Level Containers

Seperti disebutkan diatas, top-level containers seperti Jframe dan Japplet dalam Swing sangat 

tidak cocok dengan AWT. Ini adalah syarat menambahkan komponen ke dalam kontainer. Jika 

Anda ingin menambahkan langsung sebuah komponen kedalam kontainer sebagai kontainer 

AWT, pertama-tama Anda telah mendapatkan content pane dari kontainer. Untuk melakukan 

hal tersebut, Anda akan menggunakan metode getContentPane dari kontainer.

7.5.2 Contoh Jframe

import javax.swing.*;

import java.awt.*;

class SwingDemo {

   JFrame frame;

   JPanel panel;

   JTextField textField;

   JButton button;

   Container contentPane;

   void launchFrame() {

Pengenalan Pemrograman  2  12


      /* initialization */

      frame = new JFrame("My First Swing Application");

      panel = new JPanel();

      textField = new JTextField("Default text");

      button = new JButton("Click me!");

      contentPane = frame.getContentPane();

      /* add components to panel– uses FlowLayout by default */

      panel.add(textField);

      panel.add(button);

      /* add components to contentPane– uses BorderLayout */

      contentPane.add(panel, BorderLayout.CENTER);

      frame.pack();

      //causes size of frame to be based on the components

      frame.setVisible(true);

   }

   public static void main(String args[]) {

      SwingDemo sd = new SwingDemo();

      sd.launchFrame();

   }

}

Perlu diperhatikan pada package  java.awt masih saja diimpor karena layout manager yang 

digunakan terdapat pada package tersebut. Juga, memberi judul pada frame dan mengepack 

komponen di dalam frame dapat juga dilakukan untuk frame AWT.

Petunjuk penulisan program:

Perhatikan  penulisan  kode  yang  digunakan  pada  contoh  ini  tampak  berlawanan  dengan 

contoh untuk AWT. Komponen dideklarasikan sebagai fields, metode launchFrame ditentukan,  

dinisialisasikan  dan  penambahan  semua  komponen  dilaksanakan  di  dalam  metode 

launchFrame. Kita  tidak lagi  meng-extend Frame class.  Keuntungan penggunaan gaya ini  

akan lebih berguna ketika sampai pada event handling.

Berikut adalah keluaran dari program diatas.

Gambar 1.4.2: Hasil contoh program

7.5.3 Contoh JOptionPane

import javax.swing.*;

class JOptionPaneDemo {

   JOptionPane optionPane;

   void launchFrame() {

      optionPane = new JOptionPane();

      String name = optionPane.showInputDialog("Hi, what's your 

                                                name?");

      optionPane.showMessageDialog(null, 

              "Nice to meet you, " + name + ".", "Greeting...", 

              optionPane.PLAIN_MESSAGE);

Pengenalan Pemrograman  2  13


      System.exit(0);

   }

   public static void main(String args[]) {

      new JOptionPaneDemo().launchFrame();

   }

}

Lihat, begitu mudahnya memasukkan input dari user.

Berikut ini adalah hasil dari contoh program diatas

Gambar 1.4.3: Hasil contoh program 



Bab 6

Algoritma Sorting

6.1 Tujuan

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.

Beberapa  macam  algoritma  sorting telah  dibuat  karena  proses  tersebut  sangat 

mendasar  dan  sering  digunakan.  Oleh  karena  itu,  pemahaman atas  algoritma  – 

algoritma yang ada sangatlah berguna.

Setelah menyelesaikan pembahasan pada bagian ini, anda diharapkan mampu :

1. Memahami  dan  menjelaskan  algoritma  dari  insertion  sort,  selection  sort, 

merge sort dan quick sort.

2. Membuat implementasi pribadi menggunakan algoritma yang ada

6.2 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.

Pengenalan Pemrograman  2  1


6.2.1Algoritma

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]);

}

}

6.2.2Sebuah Contoh

Data

Mango

Apple

Peach

Orange

Banana

1st Pass

Mango

Apple

Peach

Orange

Banana

2nd Pass

Apple

Mango

Peach

Orange

Banana

3rd Pass

Apple

Mango

Orange

Peach

Banana

4th Pass

Apple

Banana

Mango

Orange

Peach

Gambar 1.1.2: Contoh insertion sort

Pada akhir modul ini, anda akan diminta untuk membuat implementasi bermacam 

algoritma sorting yang akan dibahas pada bagian ini. 

6.3 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.

Pengenalan Pemrograman  2  2


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.

6.3.1Algoritma

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]);

}

}

6.3.2Sebuah Contoh

Data

Maricar

Vanessa

Margaux

Hannah

Rowena

1st Pass

Hannah

Vanessa

Margaux

Maricar

Rowena

2nd Pass

Hannah

Margaux

Vanessa

Maricar

Rowena

3rd Pass

Hannah

Margaux

Maricar

Vanessa

Rowena

4th Pass

Hannah

Margaux

Maricar

Rowena

Vanessa

Figure 1.2.2: Contoh selection sort

6.4 Merge Sort

Sebelum mendalami algoritma  merge sort,  mari kita mengetahui garis besar dari 

konsep divide and conquer karena merge sort mengadaptasi pola tersebut.

6.4.1Pola Divide and Conquer

Beberapa  algoritma  mengimplementasikan  konsep  rekursi  untuk  menyelesaikan 

permasalahan.  Permasalahan  utama  kemudian  dipecah  menjadi  sub-masalah, 

kemudian solusi dari sub-masalah akan membimbing menuju solusi permasalahan 

utama.

Pengenalan Pemrograman  2  3


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

6.4.2Memahami 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 menjelaskan langkah kerja dari Merge sort.

1. Divide

Memilah elemen – elemen dari rangkaian data menjadi dua bagian.

2. Conquer

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.

6.4.3Algoritma

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);

}

}

Pengenalan Pemrograman  2  4


6.4.4Sebuah Contoh

Rangkaian data:

7 2 5 6

Membagi rangkaian menjadi dua bagian:

LeftArr RightArr

27 27 65 65

Membagi LeftArr menjadi dua bagian:

LeftArr RightArr

77 22

Mengkombinasikan

2 7

Membagi RightArr menjadi dua bagian:

LeftArr RightArr

Mengkombinasikan

5 6

Mengkombinasikan LeftArr dan RightArr.

2 5 6 7

Gambar 1.3.4: Contoh merge sort

6.5 Quicksort

Quicksort ditemukan oleh C.A.R Hoare. Seperti pada merge sort, algoritma ini juga 

berdasar pada pola divide-and-conquer. Berbeda dengan  merge sort, algoritma ini 

hanya mengikuti langkah – langkah sebagai berikut :

1. Divide

Memilah rangkaian data menjadi dua sub-rangkaian A[p…q-1] dan A[q+1…r] 

dimana setiap elemen A[p…q-1] adalah kurang dari atau sama dengan A[q] 

dan  setiap  elemen pada  A[q+1…r]  adalah  lebih  besar  atau  sama dengan 

elemen  pada  A[q].  A[q]  disebut  sebagai  elemen  pivot.  Perhitungan  pada 

elemen q merupakan salah satu bagian dari prosedur pemisahan.

Pengenalan Pemrograman  2  5


2. Conquer

Mengurutkan elemen pada sub-rangkaian secara rekursif 

Pada algoritma quicksort, langkah ”kombinasi” tidak di lakukan karena telah terjadi 

pengurutan elemen – elemen pada sub-array

6.5.1Algoritma

void quickSort(Object array[], int leftIdx, int rightIdx) {

int pivotIdx;

/* Kondisi Terminasi */

if (rightIdx > leftIdx) {

pivotIdx = partition(array, leftIdx, rightIdx);

quickSort(array, leftIdx, pivotIdx-1);

quickSort(array, pivotIdx+1, rightIdx);

}

}

6.5.2Sebuah Contoh

Rangkaian data:

3 1 4 1 5 9 2 6 5 3 5 8

Pilih sebuah elemen yang akan menjadi elemen pivot.

3 1 4 1 5 9 2 6 5 3 5 8

Inisialisasi elemen kiri sebagai elemen kedua dan elemen kanan sebagai elemen 

akhir.

kiri kanan

3 1 4 1 5 9 2 6 5 3 5 8

Geser elemen kiri kearah kanan sampai ditemukan nilai yang lebih besar dari elemen 

pivot tersebut. Geser elemen kanan ke arah kiri sampai ditemukan nilai dari elemen 

yang tidak lebih besar dari elemen tersebut.

kiri kanan

3 1 4 1 5 9 2 6 5 3 5 8

Tukarkan antara elemen kiri dan kanan

kiri kanan

Pengenalan Pemrograman  2  6


3 1 3 1 5 9 2 6 5 4 5 8

Geserkan lagi elemen kiri dan kanan.

kiri kanan

3 1 3 1 5 9 2 6 5 4 5 8

Tukarkan antar elemen kembali.

kiri kanan

3 1 3 1 2 9 5 6 5 4 5 8

Geserkan kembali elemen kiri dan kanan.

kanan kiri

3 1 3 1 2 9 5 6 5 4 5 8

Terlihat bahwa titik kanan dan kiri telah digeser sehingga mendapatkan nilai elemen 

kanan < elemen kiri. Dalam hal ini tukarkan elemen pivot dengan elemen kanan.

pivot

2 1 3 1 3 9 5 6 5 4 5 8

Gambar 1.4.2: Contoh quicksort

Kemudian urutkan elemen sub-rangkaian pada setiap sisi dari elemen pivot.

6.6 Latihan

6.6.1Insertion Sort

Impelementasikan  algoritma  insertion  sort dalam  Java  untuk  mengurutkan 

serangkaian  data  integer.  Lakukan  percobaan  terhadap  hasil  implementasi  anda 

terhadap rangkaian data integer yang dimasukkan oleh pengguna melalui command 

line.

Pengenalan Pemrograman  2  7


6.6.2Selection Sort

Impelementasikan  algoritma  selection  sort dalam  Java  untuk  mengurutkan 

serangkaian  data  integer.  Lakukan  percobaan  terhadap  hasil  implementasi  anda 

terhadap rangkaian data integer yang dimasukkan oleh pengguna melalui command 

line.

6.6.3Merge Sort

Gunakan implementasi merge sort berikut ini terhadap serangkaian data integer.

class MergeSort {

static void mergeSort(int array[], int startIdx, 

int endIdx) {

if(startIdx == _____) {

return;

}

int length = endIdx-startIdx+1;

int mid = _____;

mergeSort(array, _____, mid);

mergeSort(array, _____, endIdx);

int working[] = new int[length];

for(int i = 0; i < length; i++) {

working[i] = array[startIdx+i];

}

int m1 = 0;

int m2 = mid-startIdx+1;

for(int i = 0; i < length; i++) {

if(m2 <= endIdx-startIdx) {

if(m1 <= mid-startIdx) {

if(working[m1] > working[m2]) {

array[i+startIdx] = working[m2++];

} else {

array[i+startIdx] = _____;

}

} else {

array[i+startIdx] = _____;

}

} else {

array[_____] = working[m1++];

}

}

}

public static void main(String args[]) {

int numArr[] = new int[args.length];

for (int i = 0; i < args.length; i++) {

numArr[i] = Integer.parseInt(args[i]);

}

mergeSort(numArr, 0, numArr.length-1);

for (int i = 0; i < numArr.length; i++) {

System.out.println(numArr[i]);

}

}

}

Pengenalan Pemrograman  2  8


6.6.4 Quicksort

Gunakan implementasi quicksort berikut ini terhadap serangkaian data integer.

class QuickSort {

static void quickSort (int[] array, int startIdx, 

int endIdx) {

// startIdx adalah index bawah

// endIdx is index atas

// dari array yang akan diurutkan

int i=startIdx, j=endIdx, h;

//pilih elemen pertama sebagai pivot

int pivot=array[_____];

// memilah

do {

while (array[i]_____pivot) {

i++;

}

while (array[j]>_____) {

j--;

}

if (i<=j) {

h=_____;

array[i]=_____;

array[j]=_____;

i++;

j--;

}

} while (i<=j);

// rekursi

if (startIdx<j) {

quickSort(array, _____, j);

}

if (i<endIdx) {

quickSort(array, _____, endIdx);

}

}

public static void main(String args[]) {

int numArr[] = new int[args.length];

for (int i = 0; i < args.length; i++) {

numArr[i] = Integer.parseInt(args[i]);

}

quickSort(numArr, 0, numArr.length-1);

for (int i = 0; i < numArr.length; i++) {

System.out.println(numArr[i]);

}

}

}