Gua disini akan memberikan rangkuman tentang " ALGORITMA DAN STRUKTUR DATA ". Pastinya temen - temen semua tidak sabar ya wkwkkw. Berikut materi yang gua kasih ke temen - temen semua guna dapat membantu temen - temen semua agar lebih paham :).
ENJOYYYY !!!!!!
POKOK BAHASAN 1
STRUKTUR DATA, ARRAY, POINTER, DAN STRUKTUR
- Konsep
Dasar Struktur Data
Struktur data adalah sebuah bagian dari
ilmu pemrograman dasar yang mempunyai karakteristik yang terkait dengan sifat
dan cara penyimpanan sekaligus penggunaan atau pengaksesan data.
Struktur data bertujuan agar cara
mempresentasikan datadalam membuat program dapat dilakukan secara efisien dalam
pengolahan di memori dan pengolahan penyimpanan dari program ke storage juga
lebih mudah dilakukan.
- Konsep
Dasar Array
Array adalah kumpulan elemen-elemen data.
Kumpulaan elemen tersebut mempunyai suusnan tertentu yang teratur. Jumlah
elemen terbatas, dan semua elemen mempunyai tipe data yang sama. Jenis-jenis
array:
a. Array Satu Dimensi
Struktur array satu dimensi dapat
dideklarasikan dengan bentuk umum berupa : tipe_var nama_var[ukuran];
Dengan :
-
Tipe_var :
untuk menyatakan jenis elemen array (misalnya int, char, unsigned).
-
Nama_var :
untuk menyatakan nama variabel yag dipakai.
-
Ukuran :
untuk menyatakan jumlah maksimal elemen array.
Contoh : float nilai_ujian[5];
b. Array Dua Dimensi
Tipe data array dua dimensi biasa
digunakan untuk menyimpan, mengolah maupun menampilkan suatu data dalam bentuk
table atau matriks. Untuk mendeklarasikan array agar dapat menyimpan data
adalah :
Tipe_var nama_var[ukuran1][ukuran2];
Dimana :
-
Ukuran 1
menunjukkan jumalah/nomor baris.
-
Ukuran 2
menunjukkan jumlah/nomor kolom.
Jumlah elemen yang dimiliki array dua dimensi
dapat ditentukan dari hasil perkalian :
Ukuran1 x ukuran2.
Seperti halnya pada array satu dimensi, data
array dua dimensi akan ditempatkan pada memori secara berurutan.
c. Array Multidimensi / Dimensi Banyak
Array berdimensi banyak atau multidimensi
terdiri array yang tidak terbatas hanya dua dimensi saja. Bentuk umum
pendeklarasian array multidimesni adalah : tipe_var nama_var[ukuran1][ukuran2]…[ukurann];
Contoh : int data_angaka[3][6][6];
Yang merupakan array tiga dimensi
Mengakses Elemen Array :
Dalam Bahasa C++, data array akan disimpan
dalam memori pada alokasi yang berurutan.
Elemen pertama biasanya mempunyai. indeks
bernilai 0. Contoh :
Float nilai_tes[5];
Jika pada contoh diatas, variabel nilai_tes
mempunyai 5 elemen, maka elemen pertama mempunyai indeks sama dengan 0, elemen
kedua mempunyai indeks 1, dan seterusnya. Bentuk umum pengaksesan suatu elemen
variabel array adalah :
Nama_var[indeks];
Gambar berikut memperlihatkan urutan komponen
array dalam memori.
Untuk variabel array nilai_tes :
Gambar 1.1 Struktur Array Satu Dimensi
Inisialisasi Array :
Array dapat
diinisialisasikan secara langsung saat pertama kali dideklarasikan (efisien
untuk array berdimensi sedikit).
Contoh : int
x[2]={1,2};
Array dapat
dideklarasikan terlebih dahulu, baru kemudian diisi elemnya.
Contoh :
Int x[2];
x[0]=1;
x[1]=2;
- Konsep Dasar Pointer
Pointer adalah sebuah variabel yang berisi lamat variabel yang lain. Suatu
ponter dimaksudkan untuk meunjuk koperatore suatu alamat memori sehingga alamat
dari suatu variabel dapat diketahui dengan mudah. Deklarasi pointer :
Operator pointer :
Operator ‘&’ : untuk mendapatkan
alamat memori operand/variabel pointer.
Operatot ‘*’ : untuk mengakses nilai data
operand/variabel pointer.
- Konsep
Dasar Struktur
Struktur adalah koleksi dari variabel yang
dinyatakan dengan sebuah nama, dengan sifat setiap variabel dapat memiliki tipe
yang berlainan.
Struktur biasa dipakai untuk
mengelompokkan beberapa informasi yang berkaitanmenjadi sebuah satu kesatuan.
Contoh sebuah struktur adalah informasi data tanggal, yang berisi tanggal,
bulan, dan tahun.
Mendeklarasikan Struktur :
Contoh pendefisinian tipe data struktur
adalah : struct
Data_tanggal
{ int tanggal;
Masing – masing tipe dari elemen struktur
dapat berlainan. Adapun variabel_struktur1 sampai dengan variabel_struktur M
menyatakan bahwa variabel struktur yag dideklarasikan bisa lebih dari satu. Jika ada lebih dari satu variabel, antara
variabel struktur dipisahkan dengan tandakoma.
Mengakses Elemen Struktur :
Elemen dari struktur dapat diakses dengan
menggunakan bentuk :
Variabel_struktur.nama_field
Antara variabel_struktur dana nama_field
dipisahkan dengan operator titik (disebut operator anggota struktur). Contoh berikut merupakan instruksi untuk mengisikan data padafield
tanggal :
tgl_lahir.tang
gal=30
int
bulan;
int
tahun;
};
Yang mendefinisikan tipe struktur
bernama data_tanggal, yang terdiri dari tiga buah elemen berupa tanggal, bulan,
dan tahun. Bentuk umum dalam mendefinisikan dan mendeklarasikan struktur adalah
:
Struct nama_tipe_struktur
{
Tipe
filed1
;Tipe
field2
;Tipe
field3
;
}variabel_struktur1….variabel_strukturM;
Berikut salah satu contoh programnya :
#include <stdio.h>
#include <iostream.h>
#include <conio.h>
void main()
{
int
square[100];//--> Array 1 dimensi dengan tempat yang dipesan sebanyak 100
int i;
int k;
//perhitungan
for (i=0; i<10;
i++)// Angka yang ditampilkan 1-10
{
k=i+1;
square[i]=k*k;
printf("\n
Pangkat dari %d adalah %d", k, square[i]);
}
getch();
}
OUTPUT :
POKOK BAHASAN 2
LINKED LIST (SENARAI)
Linked
list adalah sejumlah objek atau
elemen yang dihubungkan satu dengan lainnya sehingga membentuk suatu list. Sedangkan
objek atau elemen itu sendiri adalah merupakan gabungan beberapa data
(variabel) yang dijadikan satu kelompok atau structure atau record yang dibentuk dengan perintah struct. Untuk menggabungkan objek satu
dengan lainnya, diperlukan paling tidak sebuah variabel yang bertipe pointer.
Syarat linked list adalah harus
adapat diketahui alamat simpul pertama atau biasa dipakai variabel First/Start/Header. Struktur dasar
sebuah list seperti gambar berikut :
Gambar 2.1 List Tunggal
Istilah – istilah dalam linked list :
-
Simpul
Simpul
terdiri dari dua bagian yaitu :
a.
Bagian data
b.
Bagian pointer yang menunjuk ke simpul berikutnya
-
First/Header
Variabel First/Header berisis alamat (pointer)/acuan
(reference) yag menunjuk lokasi
simpul pertama linked list, digunakan
sebagai awal penelusuran linked list.
-
Nil/Null
Tidak bernilai, digunakan untuk menyatakan tidak mengacu ke manapun.
-
Simpul Terakhr (Last)
Simpul terakhir linked list berari tidak menunjuk simpul berikutnya. Tidak
terdapat alamat disimpan di field pointer
(bagian kedua dari simpul). Nilai null atau nil disimpan di field pointer di simpul terakhir.
Jenis
– jenis linked list :
List kosong
List kosong hanya terdiri dari
sebuah petujuk elemen yang berisi NULL (kosong), tidak memiliki satu buah
elemen pun sehigga hanya berupa penunjuk awal elemn berisi NULL.
List Tunggal
List tuggal adalah list yang elemenya hanya menyimpan informasi elemen
setelahnya (next), sehingga jalanya
pengaksessan list hanya dapat dilakukan secara maju. List tuggal terbagi
menjadi tiga jenis yaitu list tunggal dengan kepala (first), list tunggal kepala (first)
dan ekor (tail), serta list tunggal
yang berputar.
Gambar 2.2 List Tunggal dengan
Kepala dan Ekor, List Tunggal Berputar
List
Ganda
List
ganda adalah sebuah list yang elemenya menyimpan informasi elemen sebelumnya
dan informasi elemen setelahnya, sehingga proses penelusuan list dapat
dilakukan secara maju dan mundur. List ganda terbagi menjadi tiga jenis yaitu
list ganda dengan kepala (first), list
ganda dengan kepala (first) dan ekor (tail), serta list ganda yang berputar.
Gambar 2.3 List ganda dengan
Kepala, List ganda dengan Kepala dan Ekor
Operasi Dasar pada Linked List :
IsEmpty :
Fungsi ini menentukan apakan linked list kosong atau tidak.
Size :
operasi untuk mengirim jumlah elemen di linked list.
Create : operasi untuk penciptaan list baru yang kosong.
Insertfirst : operasi penyisipan simpul sebagai simpul pertama.
Insertafter : operasi untu penyisispan simpul setelah simpul tertentu.
Insertlast : operasi untuk penyisipan simpul sebagai simpul terakhir.
Insertbefore : operasi untuk penyisipan simpul sebelum simpul tertentu.
Deletefirst : operasi penghapusan simpul pertama.
Deleteafter : operasi penghapusan setelah simpul tertentu.
Deletelast : operasi penghapusan simpul terakhir.
Contoh Program :
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <conio.h>
#include <malloc.h>
using namespace std;
typedef struct nod
{
int
data;
struct
nod *next;
}NOD, *NODPTR;
void CiptaSenarai(NODPTR *s)
{
*s
= NULL;
}
NODPTR NodBaru(int m)
{
NODPTR
n;
n
= (NODPTR) malloc (sizeof(NOD));
if
(n !=NULL)
{
n->data=m;
n->next=NULL;
}
return
n;
}
void SisipSenarai(NODPTR *s, NODPTR t,
NODPTR p)
{
if(p==NULL)
{
t->next=*s;
*s=t;
}
else
{
t->next=p->next;
p->next=t;
}
}
void CetakSenarai (NODPTR s)
{
NODPTR
ps;
for
(ps=s; ps!=NULL; ps=ps->next)
printf("%d
--> ", ps->data);
printf("NULL\n");
}
int main()
{
NODPTR pel;
NODPTR n;
CiptaSenarai(&pel);
n=NodBaru(55);
SisipSenarai(&pel, n, NULL);
n=NodBaru(75);
SisipSenarai(&pel, n, NULL);
CetakSenarai(pel);
getch;
}
POKOK BAHASAN 3
STACK (TUMPUKAN)
Stack adalah kumpula elemen-elemen yang tersimpan dalam suatu
tumpukan. Aturan penyisispan dan penghapusan elemennya tertentu :
-
Penyisipan
selalu dilakukan “di atas “ TOP
-
Penghapusan
selalu dilakukan pada TOP
Karena aturan penyisipan dan penghapusan semacam itu, TOP adalah
satu-satunya alamat tempat terjadi operasi, elemen yang ditambahkan paling
akhir akan menjadi elemen yang akan dihapus. Dikatakan bahwa elemen Stack
tersususn secara LIFO (Last In First
Out).
Seperti halnya jika kita mempunyai sebuah tumpukan buku, agar
tumpukan buku itu tidak ambruk ketika kita mengambil sebuah buku di dalam
tumpukan itu amaka harus diambil satu per satu dari tumpukan yang paling atas
dari tumpukan.
Gambar 3.1 Ilustrasi
Stack
Perhatikan bahwa
dengan definsi semacam ini, representasi tabel sangat tepat untuk mewakili
stack, karena operasi penambahan dan pengurangan hanya dilakukan disalah satu
ujung tabel.
Beberapa contoh
penggunaan stack adalah pemanggilan prosedur, perhitugan ekspresi aritmatika,
rekursifitas, backtracking, peaganan interupsi, dan lain-lain. Karakteristik
penting stack sebagai berikut :
- Elemen stack
yaitu item-item data di elemen
stack
- TOP (elemen puncak dari stack)
- Jumlah elemen pada stack
- Status/kondisi stack,
yaitu :
-
Penuh
Bila
elemen di tumpukan mencapai kapasitas maksimum tumpukan. Pada kondisi ini,
tidak mungkin dilakukan penambahan ke tumpukan.Penambahan di elemen
menyebabakan kondisi kesalahan Overflow.
-
Bila tidak ada elemen tumpukan.
Pada kondisi ini, tidak mungkin dilakukan pengambilan elemen tumpukan. Pengambilan elemen
menyebabkan kondisi kesalahan Underflow.
Stack memiliki operasi-operasi pokok sebagai berikut :
Push : Untuk menambahkan item
pada tumpukan paling atas.
void Push (itemType x, Stack*S)
{
If(Full (S))
Printf(“Stack
FULL”);
else
{
S->item[S->Count]=x;
++(S->count);
}
}
Pop : Untuk mengambil item teratas
int Pop (Stack S, itemType x)
{
if (Empty (S))
Printf(“Stack
Kosong”);
else
{
-(S->Count);
x=s->item(s->Count);
}
}
Clear : Untuk mengosongkan
stack
void InitializeStack (Stack S)
{
S->Count=0;
}
IsEmpty : Untuk memerikasa
apakah stack kosong
int Empty (Stack *S)
{
return (S->Count==0);
}
IsFull : Untuk memeriksa apakah stack
sudah penuh
int Full (Stack S)
{
return(S->Count==MAXSTACK);
}
Representasi stack :
-
Representasi statis
Stack
dengan representasi statis biasanya diinplementasikan dengan menggunakan array.
Sebuah array memiliki tempat yang dialokasikan diawal sehingga sebuah elemen
yang dimasukan dalam sebuah array terbatas pada tempat yang ada pada array.
Karena menggunakan array maka stack dengan representasi statis dalam mengalami
kondisi elemen penuh. Ilustrasi stack dengan representasi statis dapat dilihat pada gambar 3.2 :
Gambar 3.2 Representasi Stack Statis
-
Representasi dinamis
Stack
dengan representasi dinamis biasanya diimplementasikan dengan menggunakan
pointer yang mnunjuk pada elemen-elemen yang dialokasikan pada memori. Illustrasi stack
dengan representasi dinamis dapat dilihat pada gambar 3.3 :
Gambar 3.3 Representasi Stack Dinamis
Karena semua operasi pada
sebuah stack diawali dengan elemen yang paling atas maka jika menggunakan
representasi dinamis saat elemen ditambahkan akan mengguakan penambahan elemenpada
awal stack (addfirst) dan saat
pengambilan atau penghapusan elemen menggunakan penghapusan di awal stack (delfirst).
Contoh Program :
#include <stdio.h>
#include <iostream>
#include <conio.h>
#define MAXSTACK 3
typedef int itemType;
typedef struct
{
int
item[MAXSTACK];
int
jml;
}Stack;
int init(Stack *s)
{
s->jml=0;
}
int kosong(Stack *s)
{
return
(s->jml==0);
}
int penuh(Stack *s)
{
return
(s->jml==MAXSTACK);
}
int isi(itemType x, Stack *s)
{
if
(penuh(s))
printf("\nMAAF!!!
Data PENUH\n");
else{
s->item[s->jml]=x;
++(s->jml);
}
}
int ambil(Stack *s, itemType *x){
if
(kosong(s))
printf("\nMaaf
Data Kosong\n");
else
{
--(s->jml);
*x=s->item[s->jml];
s->item[s->jml]=0;
printf("\nData
%i Berhasil Diambil\n",*x);
}
}
int tampil(Stack *s){
if
(kosong(s))
printf("\nMaaf
Data Masih Kosong\n");
else
printf("\n");
for(int
i=s->jml-1; i>=0; i--){
printf("Data
: %d\n", s->item[i]);
}
}
int hapus(Stack *s){
s->jml=0;
printf("\nSemua
Data Berhasil Dihapus\n");
}
int main(){
int
pil;
Stack
tumpukan;
itemType
data;
init(&tumpukan);
do{
printf("\nMENU:
\n 1. Isi (Data Angka)\n 2. Ambil\n 3. Lihat\n 4. Hapus (Hapus Semua Data)\n 5.
Keluar\n");
printf("\n");
printf("Masukkan
Pilihan : ");
scanf("%i",&pil);
switch(pil){
case
1 :
printf("\nMasukkan
Data Angka : ");
scanf("%i",&data);;isi(data,
&tumpukan);
break;
case
2 :
ambil(&tumpukan,&data);
break;
case
3 :
tampil(&tumpukan);
break;
case
4 :
hapus(&tumpukan);
break;
}
}while(pil!=5);
getch;
}
OUTPUT :
POKOK BAHASAN 4
QUEUE (ANTRIAN)
Antrian adalah suatu kumpulan data yang penambahan
elemenya hanya bisa dilakukan pada suatu ujung (disebut sisi belakang atau
REAR), dan penghapusan atau pengambilan elemen dilakukan lewat ujung yang lain
(disebut sisi depan atau FRONT). Prinsip yang digunakan
dalam antrian ini adalah FIFO (First In
First Out) yaitu elemen yang pertama kali masuk akan keluar pertama
kalinya.
Penggunaan
antrian antara lain simulasi antrian di dunia nyata (antrian pembelian tiket),
sistem jaringan computer (pemrosesan banyak paket yang dating dari banyak
koneksi pada host, bridge, gateway),
dan lain-lain.
Gambar 4.1 Ilustrasi Antrian
dengan 8 Elemen
Karakteristrik penting antrian
sebagai berikut :
- Elemen antrian yaitu
item-item data yang terdapat dalam antrian.
- Head/front (elemen terdepan antrian).
- Tail/rear (elemen terakhir antrian).
- Jumlah antrian pada antrian (count).
- Status/kondisi antrian, ada
dua yaitu :
-
Penuh
Bila
elemen di antrian mencapai kapasitas maksimum antrian. Pada kondisi ini, tidak
mungkin dilakukan penambahan ke antrian. Penambahan di elemen menyebabkan
kondisi kesalahan Overflow.
-
Kosong
Bila tidak
ada elemen antrian. Pada kondisi ini, tidak mungkin dilakukan pengambilan
elemen antrian. Pengambilan elemen menyebabkan kondisi kesalahan Underflow.
Operasi-operasi
pokok pada antrian diantaranya adalah :
- Create Membuat antrian baru.
NOEL(CREATE(Q))=0
FRONT(CREATE(Q))=tidak terdefinisi
REAR(CREATE(Q)=tidak terdefinisi
- IsEmpty Untuk memeriksa
apakah antrian sudah penuh atau belum.
ISEMPTY(Q)=True,
jika Q adalah queue penuh.
- IsFull Mengecek apakah
antrian sudah penuh atau belum.
ISFULL(Q)=True,
jika Q adalah queue penuh.
- Enqueue/Insert Menambahkan
elemen kke dalam antrian, penambahan elemen selalu ditambahkan di dalam
elemen paling belakang.
REAR(INSERT(A,Q))=A
ISEMPTY(INSERT(A,Q))=FALSE
Algoritma
QINSERT :
a. IF FRONT = 1 AND REAR = N, OR IF
FRONT = REAR +
1, THEN
OVERFLOW, RETURN
b. IF FRONT := NULL, THEN
SET FRONT
:= 1 AND REAR := 1
ELSE IF
REAR = N,
THEN SET
REAR := 1
ELSE
SET REAR
:= REAR+!
c. SET QUEUE[REAR] := ITEM
d. RETURN
- Dequeu/Remove Unttuk
menghapus elemen terdepan/pertama dari antrian.
Algoritma
QDELETE :
a. IF FRONT := NULL, THEN UNDERFLOW,
RETURN
b. SET ITEM := QUEUE{FRONT]
c. [FIND NEW VALUE OF FRONT] IF FRONT
= REAR, THEN
SET FRONT
:= NULL AND REAR
;=NULL
ELSE IF FRONT = N, THEN
SET FRONT := 1
ELSE
SET FRONT := FRONT+!
d. RETURN
Representasi
Queue :
Representasi
statis
Queue dengan
representasi statis biasanya diimplementasikan dengan menggunakan array. Sebuah
array memiliki tempat yang dialokasikan diawal sehingga sebuah elemen yang
dimasukkan dalam sebuah array terbatas pada tempat yang ada pada array. Karena
menggunakan array maka queue dengan representasi statis dalam mengalami kondisi
elemen penuh. Ilustrasi queue dengan representasi statis dapat dilihat pada gambar :
Gambar 4.2 Representasi Queue Statis
Representasi
dinamis
Queue dengan
representasi dinamis biasanya diimplementasikan dengan menggunakan pointer yang
menunjuk pada elemen-elemen yang dialokasikan pada memori. Ilustrasi queue dengan
representasi dinamis dapat dilihat pada gambar :
Gambar 4.3
Representasi Queue Dinamis
Contoh Program :
#include <queue>
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
queue
<int> que;
que.push(10);
que.push(2);
que.push(3);
cout<<"Paling depan :
"<<que.front()<<endl;
cout<<"Paling
belakang : "<<que.back()<<endl;
que.pop();
cout<<"10
sudah dikeluarkan"<<endl;
cout<<"Paling
depan : "<<que.front()<<endl;
cout<<"Paling
belakang : "<<que.back()<<endl;
que.push(6);
cout<<"Angka
6 dimasukkan"<<endl;
cout<<"Paling
depan : "<<que.front()<<endl;
cout<<"Paling
belakang : "<<que.back()<<endl;
_getch();
}
OUTPUT :
POKOK BAHASAN 5
REKURSIF
Fungsi
rekursif adalah suatu fungsi yang memanggil dirinya sendiri, artinya fungsi
tersebut dipanggil di dalam tubuh fungsi itu sendiri. Contoh menghitung nilai
factorial. Rekursif sangat memudahkan untuk memecahkan permasalahan yang
kompleks. Sifat- sifat rekursif :
-
Dapat digunakan ketika
inti dari masalah terjadi berulang kali.
-
Sedikit
lebih efisian dari iterasi tapi lebih elegan.
-
Method-methodnya
dimungkinkan untuk memanggil dirinya sendiri.
Data yang berada dalam method tersebut seperti
argument disimpan sementara ke dalam stack sampai method pemanggil
diselesaikan.
Contoh Program :
#include
<iostream>
#include
<conio.h>
using
namespace std;
void
odd(int a);
void
even(int a);
int
main(void)
{
int i;
do
{
cout<<"Masukkan
Bilangan 1 - 9(0 Untuk Keluar) : \n";
cin>>i;
odd(i);
cout<<endl;
} while
(i!=0);
_getch();
}
void
odd(int a)
{
if((a%2)!=0)
cout<<"Bilangan
GANJIL\n";
else
even(a);
}
void
even(int a)
{
if((a%2)==0)
cout<<"Bilangan
GENAP\n";
else
odd(a);
}
POKOK BAHASAN 6
SORTING (PENGURUTAN)
Pengurutan
data (sorting) didefinisikan sebagai suatu proses untuk
menyusun kembali himpunan obyek menggunkan aturan tertentu. Ada dua macam urutan yang bisa digunakan dalam proses
pengurutan yaitu :
- Urutan
naik (ascending) yaitu dari data
yang mempunyai nilai paling kecil sampai paling besar.
- Urutan
turun (descending) yaitu dari
data yang mempunyai nilai paling besar sampai paling kecil.
Contoh
: data bilangan 5, 2, 6, dan 4 dapat diurutkan naik menjadi 2, 4, 5, 6 atau
diurutkan menjadi 6, 5, 4, 2. Pada data yang bertipe char, nilai data dikatakan
lebih kecil atau lebih besar dari yang lain didasarkan pada urutan relative (collating sequence) seperti dinyatakan
dalam tabel ASCII. Keuntungan dari data yang sudah dalam keadaan terurut yaitu
:
Data mudah dicari, mudah untuk dibetulkan, dihapus,
disisipi atau digabungakan. Dalam keadaan terurutkan, kita mudah melakukan
pengecekan apakah ada data yang hilang. Misalnya kamus Bahasa, buku telepon.
Mempercepat proses pencarian data yang harus dilakukan berulang kali.
Beberapa factor yang berpengaruh pada efektifitas suatu
algoritma pengurutan antara lain :
-
Banyak data yang
diurutkan.
-
Kapasitas pengingat
apakah mampu menyimpan semua data yang kita miliki.
-
Tempat penyimpanan data,
misalnya piringan, pita tau kartu, dll.
Beberapa algoritma metode pengurutan dan prosedurnya sebagai
berikut :
- Bubble Sort
Bubble Sort adalah suatu metode pengurutan yang
membandingkan elemen yang sekarang dengan elemen berikutnya. Apabila elemen
sekarang > elemen berikutnya, maka posisinya ditukar. Kalua tidak, tidak
perlu ditukar. Diberi nama “Bubble” karena proses pengurutan secara
berangsur-angsur bergerak/berpindah ke posisinya yang tepat, seperti gelembung
yang keluar dari sebuah gelas bersoda.
Proses Bubble Sort:
Data
paling akhir dibandingkan dengan data di depanya, jika ternyata lebih kecil
atau besar maka tukar sesuai dengan kekuatan ( descending atau ascending). Dan
pengecekan yang sama dilakukan terhadap data yang selanjutnya sampai data yang
paling awal.
Gambar 6.1 Langkah 1 Bubble Sort
Gambar
6.2 Langkah 2 Bubble Sort
Gambar 6.3 Langkah 3 Bubble Sort
Algoritma Bubble Sort :
- i=0
- selama (i<N-1) kerjakan
baris 3 sampai 7
- j=N-1
- selama (j>=i) kerjakan
baris 5 sampai 7
- jika (Data[j-1] > Data[j])
maka tukar Data[j-1] dengan Data[j]
- j=j-1
- i=i+1
prosedur yang menggunakan metode
gelembung :
void BubbleSort()
{
int
i,j;
for(i=1;
i<Max; i++)
for(j=Max-1;
j>=I; j--)
if(Data[j-1]
> Data[j])
Tukar(&Data[j-1],
&Data[j]);
}
- Selection Sort
Metode
seleksi melakukan pengurutan dengan cara mencari data yang terkecil kemudian
menukarkanya dengan data yang digunakan sebagai acuan atau sering dinamakan
pivot. Selama proses, pembandingan dan pengubahan hanya
dilakukan pada indeks pembanding saja, pertukaran data secara fisik terjadi
pada akhir proses. Proses pengurutan dengan metode seleksi dapat dijelaskan sebagai
berikut :
Langkah pertama dicari data terkecil
dari data pertama sampai data terakhir. Kemudian data terkecil ditukar dengan
data pertama. Dengan demikian, data pertama sekarang mempunyai nilai paling
kecil dibanding data yang lainnya.
Langkah kedua, data terkecil kita
cari mulai dari data kedua sampai terakhir. Data terkecil yang kita peroleh
ditukar dengan data kedua dan deikian seterusnya sampai semua elemen dalam
keadaan terurutkan.
Gambar 6.4 Langkah Selection Sort
Algoritma seleksi dapat dituliskan
sebagai berikut :
- i=0
- selama (i<N-1) kerjakan
baris 3 sampai dengan 9
- k=i
- j=i+1
- selama
(j<N) kerjakan baris 6 dan 7
- jika (Data[k] > Data[j])
maka k=j
- j=j+1
- Tukar Data[i] dengan Data[k]
- i=i+1
Di bawah ini merupakan prosedur
yang menggunakan metode seleksi :
void SelectionSort()
{
k=i;
for(j=i+1;
j<Max; j++)
if(Data[k]
> Data[j])
k=j;
Tukar(&Data[i],
&Data[k]);
}
}
- Marger Sort
Algoritma
Marge Sort ialah algoritma pengurutan yang berdasarkan pada strategi dovide and conquer. Algoritma ini terdiri dari dua bagian utama, pembagian
list yang diberikan untuk di-sort ke dalam beberapa sublist yang lebih kecil,
dan sort (mengurutkan) dan marge (menggabungkan) sublist-sublist yang lebih kecil ke dalam list yang sudah
diurutkan. Pembagian bisa dikatakan cukup mudah karena sublist-sublist tersebut
dibagi kedalam dua sublist yang ukuranya adalah setengah dari ukuran semula.
Hal ini terus diulang sampai sublist itu cukup kecil untuk di-sort secara efisien (umumnya telah
terdiri dari satu atau dua elemen). Dalam langkah marge dua sublist disatukan kembali dan diurutkan
pada saat yang sama. Algoritma untuk merge
sort ialah sebagai berikut :
A.
Untuk kasus n=1, maka tabe a sudah terurut sendirinya
(langkah solve)
B.
Untuk kasus n>1, maka :
a.
DIVINE: bagi table a menjadi dua bagian, bagian kiri dan
bagian kanan, masing-masing bagian berukuran n/2 elemen.
b.
CONOQUER: secara rekursif, terapkan algoritma D-and-C pada
masing-masing bagian.
c.
MERGE: gabung hasil pengurutan kedua bagian sehingga
diperoleh table a yang terurut.
Contoh Program :
#include
<iostream>
#include
<conio.h>
#include
<iomanip>
using
namespace std;
int
main(void)
{
int dataku[]={5,34,32,25,75,42,2};
int adaPertukaran;
int n;
cout<<"Data BELUM
diurutkan : \n";
for(int ctr=0;ctr<7;ctr++)
{
cout<<setw(3)<<dataku[ctr];
}
cout<<endl<<endl;
do{
adaPertukaran=0;
for(int
i=0;i<7-1;i++){
if(dataku[i+1]<dataku[i]){
n=dataku[i];
dataku[i]=dataku[i+1];
dataku[i+1]=n;
adaPertukaran=1;
}
}
} while(adaPertukaran==1);
cout<<"Data SETELAH
diurutkan : \n";
for(int
i=0;i<7;i++){
cout<<dataku[i];
cout<<"
";
}
_getch();
}
Output :
Thanks banget ya temen - temen, gua mohon maaf bila ada kesalahan. Semoga bermanfaat bagi temen - temen semua.