BUBBLE
SORT
algoritma
flowchart + program
flowchart + program
Pengurutan model ini mengambil ide
dari gelembung air, yaitu mengapungkan elemen yang bernilai kecil dari bawah ke
atas. Proses pengapungan dilakukan dengan pertukaran elemen-elemen tabel.
Apabila kita menginginkan array
terurut menaik, maka elemen array yang berharga paling kecil “diapungkan”
artinya diangkat ke “atas” (atau ke ujung kiri array) melalui proses
pretukaran. Proses pengapungkan ini dilakukan sebanyak n-1 langkah (satu
langkah disebut satu kali pass) dengan n adalah ukuran array.
ALGORITMA
1.
Tentukan Jumlah Bilangan yang akan di inputkan (contoh : 3)
2.
Inputkan bilangan 1,2,3
3.
Bandingkan bilangan 1 >/< bilangan 2
4.
Jika benar pindahkan bilangan 2 ke bilangan sisip
5.
Pindahkan bilangan 1 ke bilangan 2
6.
Pindahkan bilangan sisip ke bilangan 1
7.
Jika tidak lanjutkan proses
8.
Bandingkan bilangan 2 >/< bilangan 3
9.
Jika benar pindahkan bilangan 3 ke bilangan sisip
10. Pindahkan bilangan 2
ke bilangan 3
11. Pindahkan
bilangan sisip ke bilangan 2
12. Jika tidak lanjutkan
proses
13. Ulangi langkah no 3
hingga hasil sesuai yang diinginkan
flowchart
program :
#include <iostream.h>
#include <iostream.h>
main ()
int jmlh,i,n,bils,jwb;
int bil[50];
cout <<endl;
cout
<<"
--------------------------------------------"<<endl;
cout
<<"
Program Sorting
"<<endl;
cout
<<"
--------------------------------------------"<<endl;
cout <<endl;
cout <<"Inputkan Jumlah
Bilangan : ";
cin >>jmlh;
cout <<endl;
for (i=0;i<jmlh;i++)
cout <<"Inputkan Bilangan
ke "<<i+1<<" : ";
cin >>bil[i];
cout <<endl;
cout <<"1.
Ascanding (Kecil ke Besar)"<<endl;
cout <<"2. Descanding
(Besar ke Kecil)"<<endl;
cout <<"Jenis Sorting apa
yang anda inginkan ? : ";
cin >>jwb;
if (jwb==1)
for (i=0;i<50;i++)
for (n=0;n<jmlh-1;n++)
if (bil[n]>bil[n+1])
bils =
bil[n+1] ;
bil[n+1] = bil[n] ;
bil[n] =
bils ;
else
continue;
else
for (i=0;i<50;i++)
for (n=0;n<jmlh-1;n++)
if (bil[n]<bil[n+1])
bils =
bil[n+1] ;
bil[n+1] = bil[n] ;
bil[n] =
bils ;
else
continue;
cout <<endl;
cout <<"Sortingnya Adalah
: ";
for (i=0;i<jmlh;i++)
cout <<bil[i]<<"
";
return 0;}
ALGORITMA PENCARIAN BINER (BINARY SEARCH)
Pencarian Biner (Binary Search) pada array yang sudah terurut
Pencarian Biner (Binary Search) dilakukan untuk :
♪ memperkecil jumlah operasi pembandingan yang
harus dilakukan antara data yang dicari dengan data yang ada di dalam tabel, khususnya
untuk jumlah data yang sangat besar ukurannya.
♪ Prinsip dasarnya adalah melakukan proses
pembagian ruang pencarian secara berulang-ulang sampai data ditemukan atau
sampai ruang pencarian tidak dapat dibagi lagi (berarti ada kemungkinan data
tidak ditemukan).
♪ Syarat utama untuk pencarian biner adalah data
di dalam tabel harus sudah terurut, misalkan terurut menaik.
ALGORITMA
Kamus
Const
N : integer = 8 { misalkan jumlah elemen
array maksimum = 8 }
Type
A = array [ 1 ..... N ] of integer
Cari,
BatasAtas, BatasBawah, Tengah : Integer
Ketemu : boolean
ALGORITMA
Input
(cari) { meminta nilai data yang akan dicari}
BatasAtas ¬ 1 {
indeks array dimulai dari 1 }
BatasBawah ¬ N
Ketemu ¬ False
While
(BatasAtas < BatasBawah) and (not ketemu) do
Tengah
¬ (BatasAtas
+ BatasBawah) div 2
If
A [Tengah] = cari then
Ketemu
¬ true
Else
If
( A [Tengah] < cari ) then {
cari di bagian kanan }
BatasAtas
¬ Tengah +
1
Else
BatasBawah
¬ Tengah –
1 { cari di bagian kiri }
Endif
Endif
EndWhile
If
(ketemu) then
Output ( ‘Data
berada di index nomor’, Tengah )
Else
Output ( ‘Data tidak ditemukan’
)
Endit
Contoh
Nilai-Nilai data yang sudah terurut
:
A
|
2
|
5
|
8
|
12
|
15
|
25
|
37
|
57
|
1
|
2
|
3
|
3
|
5
|
6
|
7
|
8
|
Kasus 1 : cari = 12
Loop pertama : Tengah = (BatasAtas + BatasBawah) div
2 = (1 + 8) div 2 = 4
A [Tengah] = A [4] =
12, berarti loop pertama data langsung ditemukan
Kasus 2 : cari = 15
Loop pertama : Tengah = (BatasAtas + BatasBawah) div
2 = (1 + 8) div 2 = 4
A [Tengah] = A [4] = 12 < cari =
15, berarti BatasAtas = Tengah + 1 = 4 + 1 = 5
Loop kedua : Tengah
= (BatasAtas + BatasBawah) div 2 = (5 +
8) div 2 = 6
A [Tengah] = A [6] = 25 > cari =
15, berarti BatasBawah = Tengah - 1 = 6 - 1 = 5
Loop ketiga : Tengah
= (BatasAtas + BatasBawah) div 2 = (5 +
5) div 2 = 5
A [Tengah] = A [5] = 15, berarti setelah loop ketiga, data ditemukan
Kasus 3 : cari = 10
Loop pertama : Tengah = (BatasAtas + BatasBawah) div
2 = (1 + 8) div 2 = 4
A [Tengah] = A [4] = 12 > cari =
10, berarti BatasBawah = Tengah - 1 = 4 - 1 = 3
Loop kedua
: Tengah = (BatasAtas + BatasBawah) div
2 = (1 + 3) div 2 = 2
A [Tengah] = A [2] = 5 < cari = 10,
berarti BatasAtas = Tengah + 1 = 2 + 1 = 3
Loop ketiga : Tengah
= (BatasAtas + BatasBawah) div 2 = (3 +
3) div 2 = 3
A [Tengah] = A [3] = 8, berarti setelah loop ketiga, data tidak ditemukan
Untuk
jumlah data sebanyak n, maka proses pembandingan maksimal sebanyak ( log n
) kali. Untuk contoh di atas, jumlah data 8, maka proses pembandingan maksimal
sebanyak 3 kali.
Matriks transpose
yaitu matriks yang diperoleh dari
memindahkan elemen-elemen baris menjadi elemen pada kolom atau sebaliknya.
Transpose matriks A dilambangkan
dengan AT
Algoritma Transpose Matrik
- Masukkan ordo matrik(n)
- Input matrik di dalam array [0][0] sampai dengan array[n][n]
- ditampilkan matrik tersebut
- menukar matrik[i][j] menjadi matrik[j][i]
- ditampilkan hasil matrik tranpose
Deklarasi :
|
a[10][10]
: int
m,n,i,j : int |
Deskripsi :
|
Baca (m)
Baca (n) for(i=0;i<m;i++) { for(j=0;j<n;j++) {Tulis a[i][j]Transpose :for(i=0;i<m;i++){for(j=0;j<n;j++)
{
Transpose a[j][i]
|
[/sourcecode]
01
|
#include
<cstdlib>
|
02
|
#include
<iostream>
|
|
03
|
04
|
using
namespace std;
|
|
05
|
06
|
int
main(int argc, char *argv[])
|
|
07
|
{
|
08
|
||
09
|
int
a[10][10],m,n,i,j;
|
10
|
cout<<"Masukkan
Jumlah Baris: ";
|
|
11
|
cin>>m;
|
12
|
cout<<"Masukkan
Jumlah kolom: ";
|
|
13
|
cin>>n;
|
14
|
||
15
|
cout<<endl<<"Elemen
matriks: "<<endl;
|
16
|
for(i=0;i<m;i++)
|
|
17
|
{
|
18
|
for(j=0;j<n;j++)
|
|
19
|
{
|
20
|
cout<<"masukkan
elemen a: "<<i+1<<j+1<<": ";
|
|
21
|
cin>>a[i][j];
|
22
|
}
|
23
|
}
|
24
|
cout<<endl<<"Matriks:
"<<endl<<endl;
|
|
25
|
for(i=0;i<m;i++)
|
26
|
{
|
|
27
|
for(j=0;j<n;j++)
|
28
|
{
|
|
29
|
cout<<a[i][j]<<"
";
|
30
|
}
|
|
31
|
cout<<endl<<endl;
|
32
|
}
|
|
33
|
cout<<endl<<"Transpose
Matriks: "<<endl<<endl;
|
34
|
for(i=0;i<m;i++)
|
|
35
|
{
|
36
|
for(j=0;j<n;j++)
|
|
37
|
{
|
38
|
cout<<a[j][i]<<"
";
|
|
39
|
}
|
40
|
cout<<endl<<endl;
|
|
41
|
}
|
42
|
||
43
|
system("PAUSE");
|
|
44
|
return
EXIT_SUCCESS;
|
|
45
|
}
|
Dari judulnya saja
bisa ditebak bahwa KuraKura akan membahas tentang 'algortima swap' atau tata
cara untuk menukar nilai suatu variabel. Tapi algoritma yang akan saya bahas
ini hanya dapat dilakukan pada variabel bilangan (real, integer dkk) karena
teknik yang digunakan adalah operasi aritmatik. Dan algoritma ini sering keluar
pada soal olimpiade komputer tingkat OSK ataupun OSP. Berikut penjelasannya
Algoritma Swap yang
dilakukan dengan operasi aritmatik hanya memerlukan operator penjumlahan dan
pengurangan. berikut contoh potongan programmnya
a:=10;
b:=5;
a:=b-a;
b:=b-a;
a:=a+b;
nah, a=b-a kan -5
terus b=b-a --> berarti b=5-(-5)= 10
habis itu a=(-5)+10 = 5
Tidak ada komentar:
Posting Komentar