Merge sort

Tuesday, October 4, 2016

Merge sort, salah satu metode sorting yang digunakan untuk mengurutkan data secara ascending ataupun descending, algoritma ini bekerja dengan cara membagi dua array terlebih dahulu hingga menjadi bagian-bagian yang lebih kecil, hingga elemen tersebut sudah berdiri tunggal atau menjadi bagian dari elemen lain, hingga selanjutnya elemen tersebut dibandingkan, cara ini dapat menghemat proses pengurutan data.

Berikut contoh source code pada pascal :
program merge_sort_data_array_gurisa_com;

uses crt;

const
     max = 10;

type
    larik = array[1..max] of integer;

var
    data:larik;
    tahap, langkah, p:integer;
    ulang:char;

    procedure insert_data(var data:larik);

    var
         i:integer;

    begin
         randomize;
         for i := 1 to max do
         begin
              data[i] := random(100);
         end;
    end;

    procedure show_data(data:larik);

    var
         i:integer;

    begin
         for i := 1 to max do
         begin
              write(data[i], ' ');
         end;
    end;

    procedure merge(var data:larik; var langkah:integer; awal, tengah, akhir:integer);

    var
k, i, j, l:integer;
data_temp:larik;

    begin
i := awal;
j := tengah + 1;
k := awal;
repeat
  if (data[i] <= data[j]) then
  begin
   data_temp[k] := data[i];
       inc(i);
  end
  else
  begin
   data_temp[k] := data[j];
   inc(j);
  end;

  inc(k);
               inc(langkah);
         until (i > tengah) or (j > akhir);

         if (i > tengah) then
         begin
 for l := j to akhir do
 begin
  data_temp[k] := data[l];
  inc(k);
 end;
         end
else
begin
 for l := i to tengah do
 begin
  data_temp[k] := data[l];
  inc(k);
 end;
end;
for k := awal to akhir do
begin
 data[k] := data_temp[k];
end;
    end;

    procedure merge_sort(var data:larik; awal, akhir:integer);

    var
         tengah:integer;

    begin
inc(p);
if (awal < akhir) then
begin
 tengah := (awal + akhir) div 2;
 merge_sort(data, awal, tengah);
 merge_sort(data, tengah + 1, akhir);
 merge(data,langkah, awal, tengah, akhir);
              delay(300);
              inc(tahap);
              textcolor(14);gotoxy(37,11+tahap+langkah);write('TAHAP ',tahap);
     textcolor(15);gotoxy(25,12+tahap+langkah);show_data(data);
end;
    end;

begin
     repeat
           textcolor(15);gotoxy(30,2);write('MERGE SORT GURISA.COM');
           textcolor(14);gotoxy(30,3);write('~~~~~~~~~~~~~~~~~~~~~');
           textcolor(10);gotoxy(29,5);write('DATA SEBELUM DIURUTKAN');
           insert_data(data);
           textcolor(15);gotoxy(25,7);
           show_data(data);
           textcolor(10);gotoxy(29,10);write('PROSES PENGURUTAN DATA');
           textcolor(15);merge_sort(data, 1, max);
           textcolor(10);gotoxy(29,14+tahap+langkah);write('DATA SESUDAH DIURUTKAN');
           textcolor(15);gotoxy(25,16+tahap+langkah);show_data(data);
           textcolor(14);gotoxy(16,18+tahap+langkah);write('Pengurutan Terdiri Dari : ',tahap, ' Tahap & ',langkah,' Langkah');
           textcolor(14);gotoxy(22,20+tahap+langkah);write('Ulangi Proses Pengurutan [Y/T] : ');readln(ulang);
           clrscr();
     until (ulang = 'T') or (ulang = 't');
end.

Berikut contoh dalam bentuk gif : 

Sumber : Gurisa

No comments:

Post a Comment