Beli Modem Wavecom Untuk SMS Gateway. FREE E-book Gammu + FREE Ongkos kirim !!
Ingin Punya Script SMS Gateway dengan PHP + MySQL?

Dapatkan segera phpSMS V3.0, software SMS Gateway multi fungsi berbasis web buatan saya sendiri untuk keperluan Anda.
[Info Lengkap...]

Algoritma Sorting dan Implementasinya


November 21st, 2008 | by rosihanari | Cetak Artikel Ini Cetak Artikel Ini

Istilah sorting tentu tidak asing di telinga kita, yaitu istilah untuk mengurutkan data. Ada dua bentuk sorting yaitu secara ascending dan descending. Sorting secara ascending adalah cara mengurutkan data mulai data bernilai terkecil sampai terbesar. Sedangkan descending mengurutkan data mulai dari data terbesar sampai terkecil. Sebagai contoh misalkan diberikan data berupa bilangan berikut ini:

3 9 1 4 0 2

Hasil sorting ascending adalah 0 1 2 3 4 9, dan hasil secara descending adalah 9 4 3 2 1 0.

Nah pada artikel kali ini akan dibahas bagaimana kita mencari algoritma untuk melakukan sorting ini sekaligus implementasinya.

OK, misalkan diberikan data sebagaimana data di atas. Bagaimana cara kita mengurutkan data secara ascending? Yup… untuk memudahkan pemrosesan data, lebih enak kalau kita nyatakan terlebih dahulu data bilangan di atas ke dalam bentuk notasi xi dengan i = 1, 2, …, 6. Sehingga dalam hal ini x1=3, x2=9, x3=1, x4=4, x5=0 dan x6=2.

Nah… selanjutnya apabila kita ingin mengurutkan data secara ascending, maka harapan kita urutan data pertama adalah data yang memiliki nilai paling kecil. Oleh karena itu kita harus mencari data terkecil dari semua data yang ada, lalu tempatkan ia ke data urutan pertama. Lho… lantas, bagaimana dengan data urutan pertama sebelumnya? Bukankah nantinya dia akan tertimpa dengan data terkecil itu? Oh tidak… data urutan pertama sebelumnya akan kita tukar tempatnya dengan milik data terkecil. Misalkan data terkecil terletak pada urutan ke-4 dari seluruh data, maka data pertama kita tempatkan ke urutan ke-4 dan data terkecil diletakkan ke urutan pertama.

Ini dia pseudocode dalam Pascal untuk mencari nilai terkecil dari semua data (x1, x2, …, x6) sekaligus mencari tempatnya.

min := x[1];
for i:=1 to 6 do
begin
    if (x[i] <= min) then
    begin
       min := x[i];
       tempatnya_min := i;
    end;
end;

Jadi pertama-tama, kita anggap nilai minimum adalah x1. Lalu nilai minimum ini kita bandingkan dengan semua data yang ada. Jika ditemukan nilai xi yang lebih kecil atau sama dengan nilai minimum, maka xi itulah nilai minimum yang baru, sekaligus tempat miliknya data minimum ini (i) kita catat. Nah setelah nilai minimum dari semua data ditemukan, maka selanjutnya kita tukar tempat nilai minimum tadi dengan tempat data pertama.

temp := x[1];
x[1] := x[tempatnya_min];
x[tempatnya_min] := temp;

Sehingga pseudocode proses mencari nilai terkecil dan menukar tempatnya dengan data pertama menjadi

min := x[1];
for i:=1 to 6 do
begin
    if (x[i] <= min) then
    begin
       min := x[i];
       tempatnya_min := i;
    end;
end;

temp := x[1];
x[1] := x[tempatnya_min];
x[tempatnya_min] := temp;

Nah setelah ditukar tempat antara data pertama dengan data terkecil maka urutan data menjadi

0 9 1 4 3 2

Proses selanjutnya, kita ulangi lagi proses yang sama yaitu mencari data terkecil dari kelompok data urutan ke-2 sampai dengan ke-6. Lalu tukar tempat data terkecil tersebut dengan tempat data urutan ke-2. Berikut ini pseudocodenya

min := x[2];
for i:=2 to 6 do
begin
    if (x[i] <= min) then
    begin
       min := x[i];
       tempatnya_min := i;
    end;
end;

temp := x[2];
x[2] := x[tempatnya_min];
x[tempatnya_min] := temp;

Tukar tempat antara data minimum dengan data ke-2 menghasilkan urutan data

0 1 9 4 3 2

Proses yang sama kembali dilakukan untuk kelompok data mulai urutan ke-3 sampai ke-6. Cari nilai minimumnya, lalu tukar tempat dengan data ke-3. Begitu seterusnya sampai dengan kelompok data ke-6 sampai ke-6. Berikut ini hasil urutan data untuk setiap proses

hasil urutan untuk kelompok data x3 s/d x6 : 0 1 2 4 3 9
hasil urutan untuk kelompok data x4 s/d x6 : 0 1 2 3 4 9
hasil urutan untuk kelompok data x5 s/d x6 : 0 1 2 3 4 9
hasil urutan untuk kelompok data x6 s/d x6 : 0 1 2 3 4 9

Nah… setelah proses selesai diperolehlah data yang terurut secara ascending. Pada contoh ini sebenarnya proses sorting ascending selesai pada kelompok data x4 s/d x6. Namun untuk keperluan generalisasi (bisa diterapkan ke semua kasus) maka kita selesaikan proses sampai dengan kelompok data terakhir.

Dengan demikian secara umum, untuk data x1 … xn, berikut ini pseudocode untuk sorting secara ascending

for kelompok := 1 to n do
begin
   min := x[kelompok];
   for i := kelompok to n do
   begin
      if (x[i] <= min) then
      begin
         min := x[i];
         tempatnya_min := i;
      end;
   end;

   temp := x[kelompok];
   x[kelompok] := x[tempatnya_min];
   x[tempatnya_min] := temp;
end;

Sedangkan berikut ini contoh implementasi algoritma sorting ascending di atas pada kasus yang diberikan di atas.

program sorting;
var x : array[1..100] of integer;
    i, n, min, kelompok, temp, tempatnya_min : integer;
begin
    { membuat data array yang terdiri dari data : 3 9 1 4 0 2 }

    x[1] := 3;
    x[2] := 9;
    x[3] := 1;
    x[4] := 4;
    x[5] := 0;
    x[6] := 2;

    n := 6; {jumlah data}

    { proses sorting ascending }

    for kelompok := 1 to n do
    begin
       min := x[kelompok];
       for i := kelompok to n do
       begin
          if (x[i] <= min) then
          begin
             min := x[i];
             tempatnya_min := i;
          end;
       end;

       temp := x[kelompok];
       x[kelompok] := x[tempatnya_min];
       x[tempatnya_min] := temp;
    end;

    { menampilkan hasil sorting }

    for i:=1 to n do
    begin
       writeln(x[i], ' ');
    end;
end.

Lantas bagaimana dengan sorting descending? Ya… berarti kita tidak lagi mencari data minimum, tapi data maksimum. Bagaimana caranya? ya… tinggal ubah saja tanda <= menjadi >=. Oya, jangan lupa ubah pula nama variabel min menjadi max :-) karena nantinya menjadi lucu, wong mencari nilai maksimum kok nama variabelnya ‘min’, meskipun gak pengaruh di output.

Oya… Satu lagi, algoritma di atas bukan satu-satunya untuk melakukan sorting. Silakan Anda cari algoritma sorting yang lain ya…

OK… mudah-mudahan artikel ini ada manfaatnya.

VN:F [1.9.3_1094]
Rating: 10.0/10 (1 vote cast)
Algoritma Sorting dan Implementasinya, 10.0 out of 10 based on 1 rating
Anda ingin mendownload beberapa tool programming 100% gratis?
Silakan download di FREE PROGRAMMING TOOLS.
atau ingin berdonasi untuk pengembangan blog ini cukup dengan $1 via Paypal?



Beberapa artikel terkait


Share this article on:

Kata kunci: algoritma - sorting -


Ada 11 komentar dalam artikel ini.

  1. [...] artikel sebelumnya, saya telah tuliskan salah satu algoritma sorting yang dapat digunakan. Anda dapat membuat program sendiri untuk mengimplementasikan algoritma [...]

  2. pak saya sangat senang sekali berkunjung ke blog bapa. terimakasih materi yang telah dibahas, membantu sekali buat saya, karena saya sekarang lagi kuliah di STMIK Sumedang. Kebetulan materinya banyak berhubungan dengan materi yang bapak paparkan. Saya minta tolong terangin lagi tentang pengertian sorting, jenisnya, juga tentang rekursip beserta contohnya. terimakasih

  3. rosihanari says:

    To Muh. Nurdin : jenis-jenis algoritma sorting banyak mas seperti QuickSort, Bubble Sort, dll. Anda bisa baca penjelasannya di http://en.wikipedia.org/wiki/Sorting_algorithm. Kalau rekursif, kan sudah ada contohnya? :-)

  4. indra says:

    ini yang lagi aku cari, makasih banyak bapak materi tentang sorting, saiya mau bertanya nih. itu kan sortingnya baru merupakan bilangan (integer) bagaimana caranya untuk sorting type data yang bersifat string ? apakah sama metodenya ?? terima kasih ^_^

  5. rosihanari says:

    to indra: sama mas indra… algoritma di atas bisa untuk karakter atau string juga.

  6. Adhitya says:

    Apakah bisa pak kalau menggunakan procedure bagaimana struktur kodenya ?

  7. rosihanari says:

    to adhitya: bisa mas… ya tinggal kasih perintah

    procedure sort(x : array of integer);
    begin
    // printah untuk sorting diletakkan di sini
    end;

  8. yamazaki says:

    mas…, kalau ascendingnya bukan angka, tapi huruf, gimana ya…? please

  9. rosihanari says:

    @yamazaki: sama saja mas. Langsung saja dipakai, bedanya cuman tipe datanya hanya berupa string itu saja.

  10. sammylao says:

    boleh nanya Mass, klo soalnya kaya begini cara buatnya ngimaa ya?

    Buatlah program untuk proes urut dari kecil ke besar.
    Data berupa angka dimasukan acak ke matrik 1 kolom 10baris. Output adalah display pada monitor dan data sudah dalam keadaan urut

  11. rosihanari says:

    @sammylao: ya konsepnya sama seperti di atas. pertama anda buat array dulu sebanyak 10 buah. Lalu setiap kali input datanya masukkan ke dalam array itu lalu disorting secara ascending.



Tolong beri komentar donk!

Komentar Anda akan berguna untuk kemajuan blog ini.


Mohon maaf, komentar yang menggunakan email palsu atau komentar bernada negatif atau cemooh secara otomatis akan terhapus karena dianggap spam dan tidak akan tampil dalam daftar komentar.

Dimohon jangan pula memasukkan code program dalam bentuk apapun ke dalam komentar karena akan dianggap spam.

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word