Ada beberapa macam metode pengurutan data diantaranya :
- Bubble Sort
- Selection Sort
- Insertion Sort
- Merge Sort
- Quick Sort
Tetapi, dalam hal ini kelompok kami membuat sebuah program sortir data mahasiswa berdasarkan nama dan kelas dengan metode Quick Sort, berikut adalah sekilas tentang penjelasannya.
Quick Sort
Adalah algoritma yang dijalankan sebagai akibat dari terlalu banyaknya daftar yang diurutkan, dengan menghasilkan lebih banyak daftar yang diurutkan sebagai output. Algoritma merge ini disesuaikan untuk mesin drive tape. Penggunaannya dalam akses memori acak besar yang terkait telah menurun, karena banyak aplikasi algoritma merge yang mempunyai alternatif lebih cepat ketika kamu memiliki akses memori acak yang menjaga semua data. Hal ini disebabkan algoritma ini membutuhkan setidaknya ruang atau memori dua kali lebih besar karena dilakukan secara rekursif dan memakai dua tabel.
Algoritma merge sort membagi tabel menjadi dua tabel yang sama besar. Masing-masing tabel diurutkan secara rekursif, dan kemudian digabungkan kembali untuk membentuk tabel yang terurut. Implementasi dasar dari algoritma merge sort memakai tiga buah tabel, dua untuk menyimpan elemen dari tabel yang telah di bagi dua dan satu untuk menyimpan elemen yang telah terurut. Namun algoritma ini dapat juga dilakukan langsung pada dua tabel, sehingga menghemat ruang atau memori yang dibutuhkan.
Algoritma Merge umumnya memiliki satu set pointer p0..n yang menunjuk suatu posisi di dalam satu set daftar L0..n . Pada awalnya mereka menunjuk item yang pertama pada setiap daftar.
Berikut ini adalah programnya, lalu ketikanlah pada Software Pascal :
Algoritma merge sort membagi tabel menjadi dua tabel yang sama besar. Masing-masing tabel diurutkan secara rekursif, dan kemudian digabungkan kembali untuk membentuk tabel yang terurut. Implementasi dasar dari algoritma merge sort memakai tiga buah tabel, dua untuk menyimpan elemen dari tabel yang telah di bagi dua dan satu untuk menyimpan elemen yang telah terurut. Namun algoritma ini dapat juga dilakukan langsung pada dua tabel, sehingga menghemat ruang atau memori yang dibutuhkan.
Algoritma Merge umumnya memiliki satu set pointer p0..n yang menunjuk suatu posisi di dalam satu set daftar L0..n . Pada awalnya mereka menunjuk item yang pertama pada setiap daftar.
Berikut ini adalah programnya, lalu ketikanlah pada Software Pascal :
{$A+,B-,D+,E-,F-,I+,L+,N-,O-,R-,S+,V+}
{$M 16384,0,655360}
program kelompok__2DB01;
uses crt;
label awal;
var
oke:char;
type
tipelarik=string[25];
larikurut=array[1..100] of
tipelarik;
procedure masukkan;
label akhir;
const b=' ';
type mhs= record
npm:string[8];kelas:string
[5];nm:string[12];
end;
var vfilemhs:file of mhs;
recmhs:mhs; i:integer; oke:char;
begin
clrscr;
assign(vfilemhs,'kelompok.TXT');
{$i-}reset(vfilemhs);{$i+}
if ioresult <> 0 then rewrite
(vfilemhs);
i:=filesize(vfilemhs);
with recmhs do
begin
write('npm :');readln(npm);
while (npm <>'') and (length
(npm)=8)do
begin
write ('kelas :');readln(kelas);
if length(kelas)<5 then
goto akhir;
write('nama :');readln(nm);
if length(nm) <12 then
nm:=concat(nm,b);
repeat
write('save file ...y/n?');readln(oke);
until oke in ['Y','y','n','N'];
if oke in ['y','Y'] then
begin
seek(vfilemhs,i);write
(vfilemhs,recmhs);inc(i);
end;
akhir
:writeln;
write('npm:');readln(npm);
end;
writeln('data yang anda masukkan salah');
end;
close(vfilemhs);readln;
end;
procedure quicksort(var
x:larikurut; bawah,atas:word);
var i,j:word;
sementara:tipelarik;
begin
while atas>bawah do
begin
i:=bawah;
j:=atas;
sementara:=x[bawah];
while i<j do
begin
WHILE x[J]>sementara
Do
J:=J-1;
x[i]:=x[j];
while(i<j) and (x
[i]<=sementara) do
i:=i+1;
x[j]:=x[i];
end;
x[i]:=sementara;
quicksort(x,bawah,i-1);
bawah:=i+1;
end;
end;
PROCEDURE GARIS;
BEGIN
writeln
('----------------------------------------');
END;
procedure kelompok;
begin
clrscr;
GOTOXY(28,4);
GARIS;
GOTOXY(27,5);WRITE('|'); GOTOXY
(68,5);WRITE('|');
GOTOXY(27,6);WRITE('|'); GOTOXY
(68,6);WRITE('|');
gotoxy(35,6);writeln('< KELOMPOK PEMROGRAMAN PASCAL >'); GOTOXY
(68,7);WRITE('|');
GOTOXY(27,7);WRITE('|'); GOTOXY
(68,7);WRITE('|');
GOTOXY(47,7);WRITELN
('2DB01');GOTOXY(68,8);WRITE
('|');
GOTOXY(27,8);WRITE('|');GOTOXY
(68,9);WRITE('|');
GOTOXY(27,9);WRITE('|'); GOTOXY
(68,10);WRITE('|');
GOTOXY(28,9);GARIS;
GOTOXY(27,10);WRITE('|');
gotoxy(29,10);WRITELN('1. FANI TAMALA ( 32110596 )');
GOTOXY(27,11);WRITE('|'); GOTOXY
(68,11);WRITE('|');
gotoxy(29,11);WRITELN('2. MERRY CHRISTIANI ( 34110365 )');
GOTOXY(27,12);WRITE('|');GOTOXY
(68,12);WRITE('|');
gotoxy(29,12);WRITELN('3. SRI SURYANINGSIH ( 36110672 )');
GOTOXY(27,13);WRITE('|');GOTOXY
(68,13);WRITE('|');
gotoxy(29,13);WRITELN('4. WINDY KUSUMA P. ( 39110847 )');
GOTOXY(27,14);WRITE('|');GOTOXY
(68,14);WRITE('|');
GOTOXY(28,15);
GARIS;
END;
procedure tampilan(var x:char);
type
mhs=record
npm:string[8];
kelas:string[5];
nm:string[12];
end;label awal,akhir,empat;
var
gabung,gabung1,name,npms,class:larikurut;
vfilemhs: file of mhs;
recmhs:mhs;
i,J:integer;temp:STRING[5];
COBA:CHAR;
begin
awal:
clrscr;
assign(vfilemhs,'kelompok.txt');
reset(vfilemhs);
for i:= 1 to filesize(vfilemhs)
do
begin
seek(vfilemhs,i-1);
read(vfilemhs,recmhs);
name[i]:=recmhs.nm;
class[i]:=recmhs.kelas;
npms[i]:=recmhs.npm;
gabung[i]:=concat(name[i],npms
[i],class[i]);
gabung1[i]:=concat(class[i],name
[i],npms[i]);
end;
J:=2;
if x='2' then
quicksort(gabung,1,filesize
(vfilemhs));
if x='3' then
quicksort(gabung1,1,filesize
(vfilemhs));
if x='4' then
begin
quicksort
(gabung1,1,filesize(vfilemhs));
write('kelas:');readln(temp);
IF LENGTH(TEMP)<>5
THEN
BEGIN
clrscr; gotoxy
(28,10);repeat writeln('SEARCH KELAS TIDAK DITEMUKAN <ULANGI(y/n)!!');readln(coba);
until COBA in
['Y','y','n','N'];
if COBA in
['y','Y'] then
goto AWAL else goto
akhir;
end;
clrscr;
gotoxy
(30,2);writeln('KELAS :',temp);
gotoxy
(29,3);writeln('DAFTAR MAHASISWA');
goto empat;
end;
clrscr;
empat:
GOTOXY (23,4);
GARIS;
GOTOXY (23,6);
writeln('|no npm kelas nama |');
GOTOXY (23,8);
GARIS;
writeln;
for i:=1 to filesize(vfilemhs)
do
begin
if (name[i]<>'') then begin
if x='1' then BEGIN
GOTOXY (23,I+9);writeln
('|',i:2,'| ',copy(gabung
[i],13,8),' ',copy(gabung
[i],21,5) ,' ',copy(gabung
[i],0,12),'|'); END;
if x='2' then BEGIN
GOTOXY (23,I+9);writeln
('|',i:2,'| ',copy(gabung
[i],13,8),' ',copy(gabung
[i],21,5) ,' ',copy(gabung
[i],0,12)); END;
if x='3' then BEGIN
GOTOXY (23,I+9);writeln
('|',i:2,'| ',copy(gabung1
[i],18,8),' ',copy(gabung1
[i],0, 5) ,' ',copy(gabung1
[i],6,12));END;
if (x='4') and (copy(gabung1
[i],1,5)=temp) then BEGIN
GOTOXY (23,I+9);writeln
('|',i:2,'| ',copy(gabung1
[i],18,8),' ',copy(gabung1
[i],0, 5) ,' ',copy(gabung1
[i],6,12));END;
end;
J:=I+10;
end;
GOTOXY(23,J);GARIS;
akhir:
end;
var
m:char;
begin
awal:
clrscr;
GOTOXY (28,3);WRITELN('<<< MENU FILE >>>');
GOTOXY (28,5);writeln('1. INPUT DATA');
GOTOXY (28,6);writeln('2. DATA ACAK');
GOTOXY (28,7);writeln('3. SORTIR NAMA');
GOTOXY (28,8);writeln('4. SORTIR KELAS');
GOTOXY (28,9);writeln('5. MENAMPILKAN KELAS');
GOTOXY (28,10);writeln('6. SELESAI');
GOTOXY (28,12);write('PILIHAN ?');readln(oke);
IF NOT (OKE IN ['1'..'6']) THEN
BEGIN
WRITELN(CHAR(7));
GOTOXY (28,13);WRITELN('PILIHAN SALAH !!!');
READLN;
GOTO awal;
END;
case oke of
'1':begin masukkan;goto awal;
end;
'2':BEGIN m:='1';tampilan
(m);readln;goto awal; end;
'3':begin m:='2';tampilan
(m);readln;goto awal; end;
'4':begin m:='3';tampilan
(m);readln;goto awal; end;
'5':begin m:='4' ;tampilan(m);
readln;goto awal; end;
'6':begin kelompok; end;
end;
readln;
end.
Dibawah ini adalah tampilan pada Software Pascal :
{$M 16384,0,655360}
program kelompok__2DB01;
uses crt;
label awal;
var
oke:char;
type
tipelarik=string[25];
larikurut=array[1..100] of
tipelarik;
procedure masukkan;
label akhir;
const b=' ';
type mhs= record
npm:string[8];kelas:string
[5];nm:string[12];
end;
var vfilemhs:file of mhs;
recmhs:mhs; i:integer; oke:char;
begin
clrscr;
assign(vfilemhs,'kelompok.TXT');
{$i-}reset(vfilemhs);{$i+}
if ioresult <> 0 then rewrite
(vfilemhs);
i:=filesize(vfilemhs);
with recmhs do
begin
write('npm :');readln(npm);
while (npm <>'') and (length
(npm)=8)do
begin
write ('kelas :');readln(kelas);
if length(kelas)<5 then
goto akhir;
write('nama :');readln(nm);
if length(nm) <12 then
nm:=concat(nm,b);
repeat
write('save file ...y/n?');readln(oke);
until oke in ['Y','y','n','N'];
if oke in ['y','Y'] then
begin
seek(vfilemhs,i);write
(vfilemhs,recmhs);inc(i);
end;
akhir
:writeln;
write('npm:');readln(npm);
end;
writeln('data yang anda masukkan salah');
end;
close(vfilemhs);readln;
end;
procedure quicksort(var
x:larikurut; bawah,atas:word);
var i,j:word;
sementara:tipelarik;
begin
while atas>bawah do
begin
i:=bawah;
j:=atas;
sementara:=x[bawah];
while i<j do
begin
WHILE x[J]>sementara
Do
J:=J-1;
x[i]:=x[j];
while(i<j) and (x
[i]<=sementara) do
i:=i+1;
x[j]:=x[i];
end;
x[i]:=sementara;
quicksort(x,bawah,i-1);
bawah:=i+1;
end;
end;
PROCEDURE GARIS;
BEGIN
writeln
('----------------------------------------');
END;
procedure kelompok;
begin
clrscr;
GOTOXY(28,4);
GARIS;
GOTOXY(27,5);WRITE('|'); GOTOXY
(68,5);WRITE('|');
GOTOXY(27,6);WRITE('|'); GOTOXY
(68,6);WRITE('|');
gotoxy(35,6);writeln('< KELOMPOK PEMROGRAMAN PASCAL >'); GOTOXY
(68,7);WRITE('|');
GOTOXY(27,7);WRITE('|'); GOTOXY
(68,7);WRITE('|');
GOTOXY(47,7);WRITELN
('2DB01');GOTOXY(68,8);WRITE
('|');
GOTOXY(27,8);WRITE('|');GOTOXY
(68,9);WRITE('|');
GOTOXY(27,9);WRITE('|'); GOTOXY
(68,10);WRITE('|');
GOTOXY(28,9);GARIS;
GOTOXY(27,10);WRITE('|');
gotoxy(29,10);WRITELN('1. FANI TAMALA ( 32110596 )');
GOTOXY(27,11);WRITE('|'); GOTOXY
(68,11);WRITE('|');
gotoxy(29,11);WRITELN('2. MERRY CHRISTIANI ( 34110365 )');
GOTOXY(27,12);WRITE('|');GOTOXY
(68,12);WRITE('|');
gotoxy(29,12);WRITELN('3. SRI SURYANINGSIH ( 36110672 )');
GOTOXY(27,13);WRITE('|');GOTOXY
(68,13);WRITE('|');
gotoxy(29,13);WRITELN('4. WINDY KUSUMA P. ( 39110847 )');
GOTOXY(27,14);WRITE('|');GOTOXY
(68,14);WRITE('|');
GOTOXY(28,15);
GARIS;
END;
procedure tampilan(var x:char);
type
mhs=record
npm:string[8];
kelas:string[5];
nm:string[12];
end;label awal,akhir,empat;
var
gabung,gabung1,name,npms,class:larikurut;
vfilemhs: file of mhs;
recmhs:mhs;
i,J:integer;temp:STRING[5];
COBA:CHAR;
begin
awal:
clrscr;
assign(vfilemhs,'kelompok.txt');
reset(vfilemhs);
for i:= 1 to filesize(vfilemhs)
do
begin
seek(vfilemhs,i-1);
read(vfilemhs,recmhs);
name[i]:=recmhs.nm;
class[i]:=recmhs.kelas;
npms[i]:=recmhs.npm;
gabung[i]:=concat(name[i],npms
[i],class[i]);
gabung1[i]:=concat(class[i],name
[i],npms[i]);
end;
J:=2;
if x='2' then
quicksort(gabung,1,filesize
(vfilemhs));
if x='3' then
quicksort(gabung1,1,filesize
(vfilemhs));
if x='4' then
begin
quicksort
(gabung1,1,filesize(vfilemhs));
write('kelas:');readln(temp);
IF LENGTH(TEMP)<>5
THEN
BEGIN
clrscr; gotoxy
(28,10);repeat writeln('SEARCH KELAS TIDAK DITEMUKAN <ULANGI(y/n)!!');readln(coba);
until COBA in
['Y','y','n','N'];
if COBA in
['y','Y'] then
goto AWAL else goto
akhir;
end;
clrscr;
gotoxy
(30,2);writeln('KELAS :',temp);
gotoxy
(29,3);writeln('DAFTAR MAHASISWA');
goto empat;
end;
clrscr;
empat:
GOTOXY (23,4);
GARIS;
GOTOXY (23,6);
writeln('|no npm kelas nama |');
GOTOXY (23,8);
GARIS;
writeln;
for i:=1 to filesize(vfilemhs)
do
begin
if (name[i]<>'') then begin
if x='1' then BEGIN
GOTOXY (23,I+9);writeln
('|',i:2,'| ',copy(gabung
[i],13,8),' ',copy(gabung
[i],21,5) ,' ',copy(gabung
[i],0,12),'|'); END;
if x='2' then BEGIN
GOTOXY (23,I+9);writeln
('|',i:2,'| ',copy(gabung
[i],13,8),' ',copy(gabung
[i],21,5) ,' ',copy(gabung
[i],0,12)); END;
if x='3' then BEGIN
GOTOXY (23,I+9);writeln
('|',i:2,'| ',copy(gabung1
[i],18,8),' ',copy(gabung1
[i],0, 5) ,' ',copy(gabung1
[i],6,12));END;
if (x='4') and (copy(gabung1
[i],1,5)=temp) then BEGIN
GOTOXY (23,I+9);writeln
('|',i:2,'| ',copy(gabung1
[i],18,8),' ',copy(gabung1
[i],0, 5) ,' ',copy(gabung1
[i],6,12));END;
end;
J:=I+10;
end;
GOTOXY(23,J);GARIS;
akhir:
end;
var
m:char;
begin
awal:
clrscr;
GOTOXY (28,3);WRITELN('<<< MENU FILE >>>');
GOTOXY (28,5);writeln('1. INPUT DATA');
GOTOXY (28,6);writeln('2. DATA ACAK');
GOTOXY (28,7);writeln('3. SORTIR NAMA');
GOTOXY (28,8);writeln('4. SORTIR KELAS');
GOTOXY (28,9);writeln('5. MENAMPILKAN KELAS');
GOTOXY (28,10);writeln('6. SELESAI');
GOTOXY (28,12);write('PILIHAN ?');readln(oke);
IF NOT (OKE IN ['1'..'6']) THEN
BEGIN
WRITELN(CHAR(7));
GOTOXY (28,13);WRITELN('PILIHAN SALAH !!!');
READLN;
GOTO awal;
END;
case oke of
'1':begin masukkan;goto awal;
end;
'2':BEGIN m:='1';tampilan
(m);readln;goto awal; end;
'3':begin m:='2';tampilan
(m);readln;goto awal; end;
'4':begin m:='3';tampilan
(m);readln;goto awal; end;
'5':begin m:='4' ;tampilan(m);
readln;goto awal; end;
'6':begin kelompok; end;
end;
readln;
end.
Dibawah ini adalah tampilan pada Software Pascal :
Setelah program tersebut diketikkan pada Software Pascal, maka tekan Ctrl + F9 untuk proses running dan melihat hasil ( output ) dari program tersebut. Terlihat tampilan <<< MENU FILE >>> diikuti dibawahnya muncul beberapa pilihan, kalau mengetik angka 1 disamping tulisan 'Pilihan' maka artinya memilih untuk menginput data. Perhatikan gambar dibawah ini :
Jika sudah mengetikkan angka 1 pada pilihan lalu klik ENTER, maka akan menginputkan :
npm :
kelas :
nama :
save file ...y/n?
Ini dimaksudkan untuk menginputkan npm, nama, dan kelas yang akan diurutkan datanya. Jika klik y pada save file, maka data yang sudah kita masukkan akan tersimpan. Perhatikan gambar dibawah ini :
Setelah menginput data, kembalilah ke menu utama dengan menekan ENTER. Lalu pilih menu nomor 2 untuk memilih data acak. Berikut adalah tampilannya :
Tampilan setelah mengetik pada pilihan nomor 2 ( ENTER ), maka tampilannya sebagai berikut :
Lalu kembali ke menu utama lagi, selanjutnya pilih menu nomor 3 ( ENTER ) yaitu sortir nama. Maka data akan tersortir berdasarkan Nama. Perhatikan gambar berikut :
Kembali ke menu utama lagi, selanjutnya pilih menu nomor 4 ( ENTER ) yaitu sortir kelas. Maka data akan tersortir berdasarkan Kelas. Perhatikan gambar berikut :
Kembali lagi ke menu utama, selanjutnya pilih menu nomor 5 ( ENTER ) yaitu menampilkan kelas. Harus menginputkan kelas yang ingin dilihat datanya, setelah itu data yang diinputkan akan muncul. Perhatikan gambar berikut :
Contoh mengetikkan kelas 1AB13 disamping tulisan 'kelas : '
Perhatikan gambar berikut :
Tidak ada komentar:
Posting Komentar