Anda di halaman 1dari 22

BUBBLE SORT

Metode bubble sort adalah metode tersederhana untuk


melakukan pungurutan data, tetapi memiliki kinerja yang
terburuk untuk data yang besar. Pengurutan dilakukan dengan
membandingkan sebuah bilangan dengan seluruh bilangan
yang terletak sesudah bilangan itu. Penukaran dilakukan jika
suatu riteria dipenuhi.
Algoritma:
SUBRUTIN bubble_sort(L, n)
UNTUK tahap = 1 S/D n-1
UNTUK j

0 S/D n-tahap-1

JIKA L[j] > L[j+1] MAKA


//lakukan penukaran
tmp

L[j]

L[j]

L[j+1]

L[j+1]

tmp

AKHIR-JIKA
AKHIR-UNTUK
AKHIR-UNTUK
AKHIR-SUBRUTIN
Contoh (i) di bawah ini proses pengurutan dengan urut naik
dari kumpulan data berikut:
25 57 48 37 12 92 80 33

proses pengurutan dengan urut naik.


Pengurutan tahap 1:
25 57 48 37 12 92 80 33
25 57

tidak terjadi penukaran

48 57

terjadi penukaran

37 57

terjadi penukaran

12 57
57 92

terjadi penukaran
tidak terjadi penukaran

80 92

terjadi penukaran

33 92

terjadi penukaran

Pengurutan tahap 2:
25 48 37 12 57 80 33 92 (hasil pengurutan tahap 1)
25 48

tidak terjadi penukaran

37 48

terjadi penukaran

12 48

terjadi penukaran

48 57

tidak terjadi penukaran

57 80

tidak terjadi penukaran

33 80

terjadi penukaran

25 37 12 48 57 33 80 92 (hasil pengurutan tahap 1)


Jika jumlah data adalah n, maka terjadi n-1 tahap
pengurutan. Berarti pada contoh di atas diperlukan 7 tahap
pengurutan. Berikut ini tahap pengurutan-pengurutannya.
Tahap awal

25 57 48 37 12 92 80 33

Tahap 1

25 48 37 12 57 80 33 92

Tahap 2

25 37 12 48 57 33 80 92

Tahap 3

25 12 37 48 33 57 80 92

Tahap 4

12 25 37 33 48 57 80 92

Tahap 5

12 25 33 37 48 57 80 92

Tahap 6

12 25 33 37 48 57 80 92

Tahap 7

12 25 33 37 48 57 80 92

Algoritma contoh (i):


SUBRUTIN bubble_sort(L,n)
tahap

ada_penukaran
ULANG

BENAR

SELAMA

tahap

ada_penukaran
ada_penukaran
UNTUK j

SALAH
0 S/D n-tahap-1

JIKA L[j] > L[j+1] MAKA

n-1

DAN

ada_penukaran

BENAR

//lakukan penukaran
tmp

L[j]

L[j]

L[j+1]

L[j+1]

tmp

AKHIR-JIKA
AKHIR-UNTUK
tahap

tahap + 1

AKHIR-ULANG
AKHIR-SUBRUTIN

Implementasi contoh (i) dalam progam C++


#include <iostream.h>
void tampilkan_larik (int data [], int n)
{

int I;
for (i=0; i < n; i++)
cout << data [i] << ;
cout << \n;
}
void bubble_sort (int data[], int n)
{
int tahap, j, tmp;
int ada_penukaran;
tahap = 1;
ada_penukaran = 1;
while (tahap < n-1 && ada_penukaran)
{
ada_penukaran = 0;
for (j = 0; j < n tahap; j++)
if (data[j] > data[j+1])

{
ada_penukaran = 1;
//tukarkan
tmp = data[j];
data[j] = data[j+1];
data[j+1] = tmp;
}
cout << hasil tahap << tahap << :;
tampilkan_larik(data,n);
tahap++;
}
}
int main()
{
const JUM_DATA = 8;
int i;

int data[] = {25, 57, 48, 37, 12, 92, 80, 33};
bubble_sort (data, JUM_DATA);
// hasil pengurutan
cout << hasil pengurutan:\n;
tampilkan_larik(data, JUM_DATA);
return 0;
}
Flowchart:
start

inisialisasi
tahap,j,i,tmp,ada
penukaran,data[],n

for (i=0; i<n-tahap; i++

data[i],n

tahap, j, tmp, ada penukaran

while (tahap < n-1 && ada_penukaran)

for (j=0; j<n-tahap; j++

If data[j] > data[j+1]


F

T
ada penukarkan

tidak ada
penukaran

tmp = data[j]

data[j] = data[j+1]

data[j+1] = tmp

hasil tahap

tahap++

i, data[]

hasil pengurutan

finish
Hasil progam bubble sort
C:\progc>bubble sort
Hasil tahap 1:

25 48 37 12 57 80 33 92

Hasil tahap 2:

25 37 12 48 57 33 80 92

Hasil tahap 3:

25 12 37 48 33 57 80 92

Hasil tahap 4:

12 25 37 33 48 57 80 92

Hasil tahap 5:

12 25 33 37 48 57 80 92

Hasil tahap 6:

12 25 33 37 48 57 80 92

Hasil pengurutan :
12 25 33 37 48 57 80 92
C:\progc>

Metode menggunakan seleksi (selection sort)


Pengurutan seleksi (selection sort)

mempunyai

mekanisme seperti berikut: mula-mula suatu penunjuk (diberi


nama posAwal1). Yang menunjuk ke lokasi awal pengurutan
data, diatur agar berisi indeks pertama dalam larik. Selanjutnya
dicari bilangan terkecil yang terletak antar posisi sesudah yang
ditunjuk oleh penunjuk tersebut sehingga elemen terahir dalam
larik. Lokasi bilangan ini ditunjuk oleh posMin. Lalu
tukarkan nilai bilangan terkecil tersebut dengan nila yang
ditunjuk oleh posAwal proses seperti itu diulang dalam
posAwal bernilai 0 hingga n-2, dengan n menyatakan jumlah
elemen dalam larik.
Algoritma selection sort
SUBRUTIN selection_sort(L, n)
UNTUK pos Awal=0 S/D n-2
posMin
posAwal
UNTUK j
posAwal + 1 S/D n-1
JIKA L[posMin]>l[j]MAKA

posMi
j
AHIR-JIKA
AHIR-UNTUK
//Tukarkan
tmp
L[posAwal]
L[posAwal]
L[posMin]
L[posMin]
tmp
AHIR-UNTUK
AHIR-SUBRUTIN
Implementasi dala C++:
#include <iostream.h>
Void tampiplkan_larik(int data[], int n)
{
Int i;
for (i=0; i<n; i++)
Cout << data [i] << ;
Cout << \n;
}
Void selection_sort (int data[], int n)
{
Int posMin , pos Awal, j, tmp;
for (j=posAwal+1; j<n;j++)
if (data[posMin] > data [j])
posMin = j;
//Tukarkan
tmp=data[posAwal]
data[posAwal]=data[posMin];
data [posMin]=tmp;

cout << hasil posAwal= <<


posAwal <<: ;
tampilkan_larik (data, n);
}
}
Contoh kasus:
a)
67 35

25

27

26

Cek seluruh elemen array, temukan nilai terkecil (25)


dan tukarkan posisinya dengan posisi nilai yang tersimpan
pada posisi pertama dari array (3)
67 sebagai posAwal dan 25 sebagai posMin, kedua
b)

25 35 67 27 26
35 sebagai posAwal dan 26 sebagai posMin
c)
25 26 67 27 35
67 sebagai posAwal dan 27 sebagai posMin
d)

25 26 27 67 35
67 sebagai posAwal dan 25 sebagai posMin
Hasil akhir 25 26 27 67 35
Flowchart selection sort

Strat

Inisialisasi i, j

For i=0, i<n, i++

temp= i

For j=i+ 1; j<n; j++

arr[j] < arr[temp]

temp=j

tenp j=I

tukar

finish
+

Insertion Sort
Pengurutan dengan penyisipan (Insertion Sort) adalah
suatu metode yang melakukan pengurutan dengan cara
menyisipkan data yang belum terurut ke dalam bagian data
yang telah diurutkan. Konsep seperti ini biasa dilakukan pada
permainan kartu. Ketika sebuah kartu baru didapatkan (hasil
pembagian dari pengocokan kartu) kartu akan disisipkan oleh
pemain pada posisi yang tepat sehingga penambahan kartu
tersebut membuat semua kartu tetap terurutkan.
Berikut ini merupakan contoh program pengurutan
dengan penyisipan (Insertion sort) menggunakan C++:

# include <stdio.h>
main()
{
int n,i,temp,j,k;
int A[100];
printf ("Insertion sort \n");
printf ("Banyak data: ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("Data ke-%d: ",i+1);
scanf("%d",&A[i]);
}
for(i=1;i<n;i++)
{
temp=A[i];
j=i-1;
while(A[j]>temp)
{
A[j+1]=A[j];
j=j-1;
}
A[j+1]=temp;

}
printf("Setelah Urut \n");
for (i=0; i < n; i++)
printf("%d ",A[i]);
}

[Type the document title]


Hasil tampilan dari program di atas bila di aplikasikan
dalam sebuah contoh kasus (pengurutan data dari kecil ke besar
dengan datanya yaitu 27, 57, 48, 39) adalah sebagai berikut:
Insertion sort
Banyak data: 4
Data ke-1: 27
Data ke-2: 57
Data ke-3: 48
Data ke-4: 39
Setelah Urut: 27

29

33

39

Proses pengurutan data pada kasus di atas adalah:


Proses:
i=2
0 = temp
57

27

57

48

39

27

57

48

39

27

57

48

39

j=21=1
A[1] < temp
A[2]temp
0 = temp
57
i=3
0 = temp
48
[Type text]

Page 19

[Type the document title]


j=31=2
A[2] > temp
A[3]A[2]
0 = temp
48

27

57

57

39

27

48

57

39

27

48

57

39

27

48

57

57

j=21=1
A[1] < temp
A[2]temp
0 = temp
48
i=4
0 = temp
39
j=41=3
A[3] > temp
A[4]A[3]
0 = temp
39
j=31=2
A[2] > temp
A[3]A[2]
0 = temp
[Type text]

Page 20

[Type the document title]


39

27

48

48

57

27

39

48

57

j=21=1
A[1] < temp
A[2]temp
0 = temp
39

Algoritma Insertion sort di atas adalah sebagai berikut:


for i = 2 to n do
temp=A[i]
A[0]=temp
j=i1
while A[j] > temp do
A[j + 1] = A[j]
j=j1
endwhile
A[j + 1] = temp
endfor
Flowchart program pengurutan Insertion Sort:
START

int n,i,temp,j,k;
[Type text]

int A[100];

Page 21

[Type the document title]

for(i=0;i<n;i++)

A[i]

for(i=1;i<n;i++)

temp=A[i];
j=i-1;
while(A[j]>temp)

temp=A[i];
j=j-1;
A[j+1]=temp;

for(i=0;i<n;i++)
Insertion Sort
[Type text]

Banyak data:

Data ke- :
Setelah urut

Page 22

Anda mungkin juga menyukai