Anda di halaman 1dari 17

LAPORAN PRAKTIKUM

ALGORITMA & STRUKTUR DATA

PENGURUTAN DATA DENGAN METODE


BUBBLE SORTING

DISUSUN OLEH :
DWI MARLINA
13052244007

JURUSAN PENDIDIKAN TEKNIK ELEKTRONIKA


FAKULTAS TEKNIK
UNIVERSITAS NEGERI YOGYAKARTA
2015
A. JUDUL
Judul pada praktikum ini adalah Pengurutan Data dengan Metode Bubble
Sorting.

B. TUJUAN
Mengetahui dan memahami algoritma pengurutan data dengan metode bubble
sorting baik pengurutan ascending maupun descending.

C. KAJIAN TEORI
Algoritma adalah cara yang dapat ditempuh oleh komputer dalam
mencapai suatu tujuan, terdiri atas langkah-langkah yang terdefinisi dengan
baik, menerima input, melakukan proses, dan menghasilkan output. Meskipun
tidak selalu, biasanya sebuah algoritma memiliki sifat bisa dihitung
(computable) atau bisa diukur (measurable). Sebuah algoritma dikatakan
BENAR (correct) jika algoritma tersebut berhasil mengeluarkan output yang
benar untuk semua kemungkinan input.
Bubble Sort adalah salah satu algoritma untuk sorting data, atau kata
lainnya mengurutkan data dari yang terbesar ke yang terkecil atau sebaliknya
(Ascending atau Descending).
Bubble sort (metode gelembung) adalah metode/algoritma pengurutan
dengan dengan cara melakukan penukaran data dengan tepat disebelahnya
secara terus menerus sampai bisa dipastikan dalam satu iterasi tertentu tidak
ada lagi perubahan. Jika tidak ada perubahan berarti data sudah terurut.
Disebut pengurutan gelembung karena masing-masing kunci akan dengan
lambat menggelembung ke posisinya yang tepat.
Metode pengurutan gelembung (Bubble Sort) diinspirasikan oleh
gelembung sabun yang berada dipermukaan air. Karena berat jenis
gelembung sabun lebih ringan daripada berat jenis air, maka gelembung
sabun selalu terapung ke atas permukaan. Prinsip di atas dipakai pada
pengurutan gelembung.
Algoritma bubble sort adalah salah satu algoritma pengurutan yang
paling simple, baik dalam hal pengertian maupun penerapannya. Ide dari
algoritma ini adalah mengulang proses pembandingan antara tiap-tiap elemen
array dan menukarnya apabila urutannya salah. Pembandingan elemen-
elemen ini akan terus diulang hingga tidak perlu dilakukan penukaran lagi.
Algoritma ini termasuk dalam golongan algoritma comparison sort, karena
menggunakan perbandingan dalam operasi antar elemennya.
Proses
step 1 :
Periksalah nilai dua elemen mulai dari urutan ke-n sampai urutan ke-1.
Jika nilai kiri<kanan, tukarkan kedua data itu.
step 2 :
Periksalah nilai dua elemen mulai dari urutan ke-n sampai urutan ke-2.
Jika nilai kiri<kanan, tukarkan kedua data itu.
step n-1 :
Periksalah nilai dua elemen mulai dari urutan ke-n sampai urutan ke-n-1.
Jika nilai kiri<kanan, tukarkan kedua data itu.
Contoh :
Pada pengurutan data “4 3 2 1” di bawah ini.
Siklus Pertama
(4 3 2 1) menjadi (3 4 2 1)
(3 4 2 1) menjadi (3 2 4 1)
(3 2 4 1) menjadi (3 2 1 4)
Siklus Kedua
(3 2 1 4) menjadi (2 3 1 4)
(2 3 1 4) menjadi (2 1 3 4)
(2 1 3 4) menjadi (2 1 3 4)
Siklus Ketiga
(2 1 3 4) menjadi (1 2 3 4)
(1 2 3 4) menjadi (1 2 3 4)
(1 2 3 4) menjadi (1 2 3 4)
Siklus Keempat
(1 2 3 4) menjadi (1 2 3 4)
(1 2 3 4) menjadi (1 2 3 4)
(1 2 3 4) menjadi (1 2 3 4)

Dari langkah pengurutan di atas, terlihat bahwa setiap kali melakukan satu siklus,
data terkecil akan bergeser ke arah awal sebanyak satu step. Dengan kata lain,
untuk menggeser data terkecil dari urutan keempat menuju urutan pertama,
dibutuhkan siklus sebanyak tiga kali, ditambah satu kali siklus untuk
memverifikasi.
D. PEMBAHASAN DAN ANALISA
Percobaan 1 : Bubble Sorting Ascending dari depan ke belakang
Program :
#include <stdio.h>
#define MAKS
void input (void);
void bubble_asc (void);
void tukar (int*x, int*y);
void tampil (void);
int n, data[MAKS];

main()
{
printf ("BUBBLE SORTING ASCENDING\n\n");
input ();
bubble_asc ();
tampil ();
}

void input ()
{
printf ("Input banyak data : ");
scanf ("%d", &n);
int i;
for (i=0; i<n; i++)
{
printf ("Data ke-%d = ", i+1);
scanf ("%d", &data[i]);
}
}

void bubble_asc ()
{
int i,j;
for (i=1; i<n; i++)
{
for (j=0; j<n-i; j++)
{
if (data[j]>data[j+1])
tukar (&data[j], &data[j+1]);
}
}

void tukar (int *x, int *y)


{
int z;
z=*x;
*x=*y;
*y=z;

}
void tampil ()
{
int i;
printf ("\nBubble Sorting Ascending dari depan ke belakang
:\n");
for (i=0; i<n; i++)
{
printf ("%d ", data[i]);
}
}

Setelah Program diatas sudah diketik pada Dev c++, maka program siap di
compile dan di run, program akan menjalankan fungsi yang pertama yaitu
inputan manual, jadi isikan jumlah data yang akan di sorting kemudian isikan
masing masing datanya seperti pada gambar 1.1 dibawah ini :

Gambar 1.1 Penginputan data


Gambar diatas menunjukkan proses penginputan data, setelah itu tekan enter
maka program akan memanggil fungsi pengurutan data, dan penampilan data
setelah diurutkan seperti gambar 1.2 di bawah ini :

Gambar 1.2 Hasil tampilan dari percobaan 1


Data terurut diatas didapatkan dari program yang berpola dibawah ini :
Sebagai contoh, data yang akan diurutkan adalah 9 data, maka akan hanya
ada 8 siklus saja.
Siklus Siklus Siklus Siklus Siklus Siklus Siklus Siklus
1 2 3 4 5 6 7 8
1x2 1x2 1x2 1x2 1x2 1x2 1x2 1x2
2x3 2x3 2x3 2x3 2x3 2x3 2x3
3x4 3x4 3x4 3x4 3x4 3x4
4x5 4x5 4x5 4x5 4x5
5x6 5x6 5x6 5x6
6x7 6x7 6x7
7x8 7x8
8x9

Dari setiap siklus akan mengasilkan data terurut sebagai berikut :


 Siklus 1 akan menghasilkan 1 data terurut.
 Siklus 2 akan menghasilkan 2 data terurut.
 Siklus 3 akan menghasilkan 3 data terurut.
 Siklus 4 akan menghasilkan 4 data terurut.
 Siklus 5 akan menghasilkan 5 data terurut.
 Siklus 6 akan menghasilkan 6 data terurut.
 Siklus 7 akan menghasilkan 7 data terurut.
 Siklus 8 akan menghasilkan 8 data terurut.
Data yang sudah urut tidak akan dibandingkan lagi dalam siklus berikutnya.
Percobaan 2 : Bubble Sorting Ascending dari belakang ke depan
Program :
#include <stdio.h>
#define MAKS
void input (void);
void bubble_asc (void);
void tukar (int*x, int*y);
void tampil (void);
int n, data[MAKS];

main()
{
printf ("BUBBLE SORTING ASCENDING\n\n");
input ();
bubble_asc ();
tampil ();
}

void input ()
{
printf ("Input banyak data : ");
scanf ("%d", &n);
int i;
for (i=0; i<n; i++)
{
printf ("Data ke-%d = ", i+1);
scanf ("%d", &data[i]);
}
}
void bubble_asc ()
{
int i,j,c=1;
for (i=1; i<n; i++)
{
for (j=n-1; j>=c; j--)
{
if (data[j]<data[j-1])
{
tukar (&data[j], &data[j-1]);
}
}
printf ("\n");
c++;
}

void tukar (int *x, int *y)


{
int z;
z=*x;
*x=*y;
*y=z;

}
void tampil ()
{
int i;
printf ("\nBubble Sorting Ascending dari belakang ke depan
:\n");
for (i=0; i<n; i++)
{
printf ("%d ", data[i]);
}
}

Setelah Program diatas sudah diketik pada Dev c++, maka program siap di
compile dan di run, program akan menjalankan fungsi yang pertama yaitu
inputan manual, jadi isikan jumlah data yang akan di sorting kemudian isikan
masing masing datanya seperti pada gambar 2.1 dibawah ini :

Gambar 2.1 Penginputan data


Gambar diatas menunjukkan proses penginputan data, setelah itu tekan enter
maka program akan memanggil fungsi pengurutan data, dan penampilan data
setelah diurutkan seperti gambar 2.2 di bawah ini :

Gambar 2.2 Hasil tampilan dari percobaan 2


Data terurut diatas didapatkan dari program yang berpola dibawah ini :
Sebagai contoh, data yang akan diurutkan adalah 9 data, maka akan hanya
ada 8 siklus saja.
Siklus Siklus Siklus Siklus Siklus Siklus Siklus Siklus
1 2 3 4 5 6 7 8
9x8 9x8 9x8 9x8 9x8 9x8 9x8 9x8
8x7 8x7 8x7 8x7 8x7 8x7 8x7
7x6 7x6 7x6 7x6 7x6 7x6
6x5 6x5 6x5 6x5 6x5
5x4 5x4 5x4 5x4
4x3 4x3 4x3
3x2 3x2
2x1

Dari setiap siklus akan mengasilkan data terurut sebagai berikut :


 Siklus 1 akan menghasilkan 1 data terurut.
 Siklus 2 akan menghasilkan 2 data terurut.
 Siklus 3 akan menghasilkan 3 data terurut.
 Siklus 4 akan menghasilkan 4 data terurut.
 Siklus 5 akan menghasilkan 5 data terurut.
 Siklus 6 akan menghasilkan 6 data terurut.
 Siklus 7 akan menghasilkan 7 data terurut.
 Siklus 8 akan menghasilkan 8 data terurut.
Data yang sudah urut tidak akan dibandingkan lagi dalam siklus berikutnya.
Percobaan 3 : Bubble Sorting Descending dari depan ke belakang
Program :
#include <stdio.h>
#define MAKS
void input (void);
void bubble_desc (void);
void tukar (int*x, int*y);
void tampil (void);
int n, data[MAKS];

main()
{
printf ("BUBBLE SORTING DESCENDING\n\n");
input ();
bubble_desc ();
tampil ();
}

void input ()
{
printf ("Input banyak data : ");
scanf ("%d", &n);
int i;
for (i=0; i<n; i++)
{
printf ("Data ke-%d = ", i+1);
scanf ("%d", &data[i]);
}
}

void bubble_desc ()
{
int i,j;
for (i=1; i<n; i++)
{
for (j=0; j<n-i; j++)
{
if (data[j]<data[j+1])
tukar (&data[j], &data[j+1]);
}
}

void tukar (int *x, int *y)


{
int z;
z=*x;
*x=*y;
*y=z;

}
void tampil ()
{
int i;
printf ("\nBubble Sorting Descending dari depan ke belakang
:\n");
for (i=0; i<n; i++)
{
printf ("%d ", data[i]);
}
}

Setelah Program diatas sudah diketik pada Dev c++, maka program siap di
compile dan di run, program akan menjalankan fungsi yang pertama yaitu
inputan manual, jadi isikan jumlah data yang akan di sorting kemudian isikan
masing masing datanya seperti pada gambar 3.1 dibawah ini :

Gambar 3.1 Penginputan data


Gambar diatas menunjukkan proses penginputan data, setelah itu tekan enter
maka program akan memanggil fungsi pengurutan data, dan penampilan data
setelah diurutkan seperti gambar 3.2 di bawah ini :

Gambar 3.2 Hasil tampilan dari percobaan 3


Data terurut diatas didapatkan dari program yang berpola dibawah ini :
Sebagai contoh, data yang akan diurutkan adalah 9 data, maka akan hanya
ada 8 siklus saja.
Siklus Siklus Siklus Siklus Siklus Siklus Siklus Siklus
1 2 3 4 5 6 7 8
1x2 1x2 1x2 1x2 1x2 1x2 1x2 1x2
2x3 2x3 2x3 2x3 2x3 2x3 2x3
3x4 3x4 3x4 3x4 3x4 3x4
4x5 4x5 4x5 4x5 4x5
5x6 5x6 5x6 5x6
6x7 6x7 6x7
7x8 7x8
8x9

Dari setiap siklus akan mengasilkan data terurut sebagai berikut :


 Siklus 1 akan menghasilkan 1 data terurut.
 Siklus 2 akan menghasilkan 2 data terurut.
 Siklus 3 akan menghasilkan 3 data terurut.
 Siklus 4 akan menghasilkan 4 data terurut.
 Siklus 5 akan menghasilkan 5 data terurut.
 Siklus 6 akan menghasilkan 6 data terurut.
 Siklus 7 akan menghasilkan 7 data terurut.
 Siklus 8 akan menghasilkan 8 data terurut.
Data yang sudah urut tidak akan dibandingkan lagi dalam siklus berikutnya.
Percobaan 4 : Bubble Sorting Descending dari belakang ke depan
Program :
#include <stdio.h>
#define MAKS
void input (void);
void bubble_desc (void);
void tukar (int*x, int*y);
void tampil (void);
int n, data[MAKS];

main()
{
printf ("BUBBLE SORTING DESCENDING\n\n");
input ();
bubble_desc ();
tampil ();
}

void input ()
{
printf ("Input banyak data : ");
scanf ("%d", &n);
int i;
for (i=0; i<n; i++)
{
printf ("Data ke-%d = ", i+1);
scanf ("%d", &data[i]);
}
}

void bubble_desc ()
{
int i,j, c=1;
for (i=1; i<n; i++)
{
for (j=n-1; j>=c; j--)
{
if (data[j]>data[j-1]){
tukar (&data[j], &data[j-1]);}
}
}

void tukar (int *x, int *y)


{
int z;
z=*x;
*x=*y;
*y=z;

}
void tampil ()
{
int i;
printf ("\nBubble Sorting Descending dari belakang ke depan
:\n");
for (i=0; i<n; i++)
{
printf ("%d ", data[i]);
}
}

Setelah Program diatas sudah diketik pada Dev c++, maka program siap di
compile dan di run, program akan menjalankan fungsi yang pertama yaitu
inputan manual, jadi isikan jumlah data yang akan di sorting kemudian isikan
masing masing datanya seperti pada gambar 4.1 dibawah ini :

Gambar 4.1 Penginputan data


Gambar diatas menunjukkan proses penginputan data, setelah itu tekan enter
maka program akan memanggil fungsi pengurutan data, dan penampilan data
setelah diurutkan seperti gambar 4.2 di bawah ini :

Gambar 4.2 Hasil tampilan dari percobaan 4


Data terurut diatas didapatkan dari program yang berpola dibawah ini :
Sebagai contoh, data yang akan diurutkan adalah 9 data, maka akan hanya
ada 8 siklus saja.
Siklus Siklus Siklus Siklus Siklus Siklus Siklus Siklus
1 2 3 4 5 6 7 8
9x8 9x8 9x8 9x8 9x8 9x8 9x8 9x8
8x7 8x7 8x7 8x7 8x7 8x7 8x7
7x6 7x6 7x6 7x6 7x6 7x6
6x5 6x5 6x5 6x5 6x5
5x4 5x4 5x4 5x4
4x3 4x3 4x3
3x2 3x2
2x1

Dari setiap siklus akan mengasilkan data terurut sebagai berikut :


 Siklus 1 akan menghasilkan 1 data terurut.
 Siklus 2 akan menghasilkan 2 data terurut.
 Siklus 3 akan menghasilkan 3 data terurut.
 Siklus 4 akan menghasilkan 4 data terurut.
 Siklus 5 akan menghasilkan 5 data terurut.
 Siklus 6 akan menghasilkan 6 data terurut.
 Siklus 7 akan menghasilkan 7 data terurut.
 Siklus 8 akan menghasilkan 8 data terurut.
Data yang sudah urut tidak akan dibandingkan lagi dalam siklus berikutnya.
E. KESIMPULAN
1. Algoritma dari pengurutan data bubble sorting mudah dipahami, namun
dalam kecepatan pengurutan data dalam jumlah besar kurang efisien,
karena akan banyak terjadi pertukaran data.
2. Pengulangan akan tetap sama jumlahnya dari siklus pertama hingga akhir
walaupun data sesungguhnya sudah cukup terurut.

Anda mungkin juga menyukai