Tgas

Unduh sebagai docx, pdf, atau txt
Unduh sebagai docx, pdf, atau txt
Anda di halaman 1dari 27

PRAKTIKUM ALGORITMA DAN PEMROGRAMAN

MODUL III
ARRAY (LARIK)

3.1 TUJUAN

1. Memahami dasar-dasar pemrograman C++.

2. Memahami penggunaan tipe data array dalam pembuatan program.

3. Mengenal dan bisa menggunakan fungsi pembangkit bilangan acak
yang ada dalam Bahasa C++.

4. Mengenal dan bisa memakai fungsi untuk mendapatkan waktu dalam
Bahasa C++.

5. Memahami tujuan dan mekanisme pengurutan data dan pencarian
data.

6. Mampu menganalis kerja masing-masing metode pengurutan dan
pencarian, sehingga bisa memilih metode pengurutan dan/atau
pencarian data yang terbaik untuk suatu contoh kasus tertentu.

3.2 TUGAS PENDAHULUAN

1. Jelaskan tentang array dan deklarasi array dalam C++ serta tipe data
yang mungkin digunakan dalam array. Berikan contoh deklarasi array
dalam C++ lalu hitung keperluan memory-nya.

2. Buatlah contoh cara membangkitkan bilangan random dalam C++.

3. Jelaskan apa yang dimaksud dengan sorting dan searching.

4. Jelaskan mekanisme metode pengurutan dan pencarian berikut serta
berikan contoh pengurutan data yang dilakukan dengan metode tersebut.

a. Insertion Sort

b. Bubble Sort

c. Quick Sort

d. Sequential Search

e. Binary Search

Nama : Ida Bagus Widnyana.P
NIM : 1104505016
Kelompok : 04
5. Buatlah flowchart dan pseudocode (notasi algoritama) dari masing-
masing metode di atas, lalu kerjakan trace terhadap flowchart yang anda
buat.

SOAL

1. Implementasikan flowchart yang anda kerjakan ke dalam program.

2. Tambahkan pencatat waktu yang bisa digunakan untuk menghitung
waktu proses masing-masing metode pengurutan data tersebut.

3. Lakukan uji coba terhadap program yang anda buat yang mana
pembangkitan data akan diurutkan bisa dari masukan melalui keyboard
dan juga bisa melalui pembangkitan bilangan acak (pengguna hanya
memasukkan banyaknya bilangan yang akan diurutkan).

4. Lakukan uji coba terhadap program anda dengan pebangkitan bilangan
yang akan diurutkan secara acak, yang mana banyaknya bilangan yang
akan diurutkan sebanyak 1000, 2000, 4000, 8000, 16000, 32000, dan
64000 data. Lalu catatlah waktu yang akan diperlukan mengurukan
masing-masing jumlah data tersebut lalu bandingkan.

JAWABAN
1. Array
Array merupakan koleksi data dimana setiap elemen memakai nama dan tipe
yang sama serta setiap elemen diakses dengan membedakan indeks array-nya.
Berikut adalah contoh variable bernama c yang mempunyai lokasi memori yang
semuanya bertipe int.
C[0] = -45;
C[1] = 6;
C[2] = 0;
C[3] = 72;
C[4] = 1543;
C[5] = 43;
C[6] = 4;
Masing-masing nilai dalam setiap lokasi mempunyai identitas berupa nama c dan
nomor indeks yang dituliskan di dalam tanda kurung [..]. sebagai contoh, 72
adalah nilai dari c[3].


Deklarasi Array
Variable array dideklarasikan dengan mencantumkan tipe dan nama variable
yang diikuti dengan banyaknya lokasi memori yang ingin dibuat. Dengan
demikian, deklarasi untuk variable array c di atas adalah :
int c[7];
Perlu diperhatikan bahwa C++ secara otomatis menyediakan lokasi memori yang
sesuai dengan yang dideklarasikan, dimana nomor indeks selalu dimulai dari 0.
Nilai suatu variable array dapat juga diinisialisasi secara langsung pada saat
deklarasi, misalnya;
Int c[7] = {-45, 0, 6, 72, 1543, 43, 4}
Berarti setiap lokasi memori dari variable array c langsung diisi dengan nilai-nilai
yang dituliskan didalam tanda kurung kurawal.
Banyaknya lokasi memori dapat secara otomatis disediakan sesuai degan
banyaknya nilai yang akan dimasukkan, seperti contoh berikut yang tentunya
membuat variable array dengan 10 lokasi memori:
Int x []={10, 15 12, 5, 13, 9, 6, 17, 25, 31};
Untuk memperjelas gambaran anda tentang array perhatikan contoh aplikasi
variable array, yaitu program untuk menghitung jumlah setiap elemen dalam
suatu array.
Sebagai gambaran dari program tersebut, dapat dibuat sebuah algoritma sebagai
berikut:
Tentukan elemen array sebanyak yang diinginkan (dalam hal ini, elemen array
tersebut berjumlah 12 buah)
Tentukan nilai awal indeks, batas akhir indeks dan kenaikannya (dalam hal ini,
nilai awal indeks adalah 0, batas akhir indeks adalah jumlah elemen array diatas
yaitu 12 dikurangi dengan 1, kenaikannya adalah 1)
Lakukan perulangan sesuai dengan langkah 2
Lakukan penjumlahan masing-masing elemen array sampai batas akhir indeks
terpenuhi
Tampilkan penjumlahan semua elemen array
Selesai.
Sedangkan implementasi dalam program dapat dilihat berikut ini.



Contoh Program array

Gambar 3.1 Contoh Program Array
Bila program diatas dijalankan, akan muncul hasil :
Total setiap elemen array adalah 383
Adapun keterangan dari program diatas adalah sebagai berikut :
Hasil penjumlahan setiap elemen array diperoleh dari jumlah data atau elemen
array sebanyak 12 buah yang sudah didefinisikan pada awal program yaitu
#define SIZE 12. Kemudian setiap elemen array dari a[0] yang berisi data, a[1]
yang berisi data 3 di jumlahkan sampai dengan a[11] yang berisi data 45. Proses
penjumlahan dilakukan pada loop dimulai dari 0 sampai data yang terakhir atau
elemen terakhir.
Array Dimensi Satu
Bentuknya :
Tipe nama_var[ukuran];
Dengan :
Tipe : menyatakan jenis elemen array (int, char, unsigned, dan lain-lain)
Ukuran : menyatakan jumlah maksimal elemen array
Contoh :
Float nilai_ujian[5];
Pada turbo C++ array disimpan dalam memori secara berurutan. Elemen
pertama berindeks nol digambarkan sebagai berikut :
Nilai_ujian[0]
Nilai_ujian[1]
Nilai_ujian[2]
Nilai_ujian[3]
Nilai_ujian[4]
Masing-masing berbentuk float dan berjumlah 5 elemen.
Selain itu, deklarasi array juga dapat berupa :
Static int bulan[12]={1,2,3,4,5,6,7,8,9,10,11,12}
Sesuai dengan deklarasi array diatas, maka isi variable array telah ditentukan
yaitu :
Bulan[0] bernilai 1
Bulan[1] bernilai 2
Bulan[2] bernilai 3
Bulan[3] bernilai 4
Bulan[4] bernilai 5
Bulan[5] bernilai 6
Bulan[6] bernilai 7
Bulan[7] bernilai 8
Bulan[8] bernilai 9
Bulan[9] bernilai 10
Bulan[10] bernilai 11
Bulan[11] bernilai 12
Untuk memperjelas tentang array dimensi satu, perhatikan maslah berikut ini :
Misalkan Anda diminta membuat algoritma dan program untuk menampilkan
bilangan dari 1 sampai bilangan 10, dengan pangkatnya masing-masing. Adapun
batas nilai maksimal yang disimpan adalah 100.
Sesuai yang telah Anda pelajari , bahwa bilangan 1 pangkatnya adalah 1. Hasil
ini diperoleh dari 1*1, kemudian bilangan 2 pangkatnya adalah 4, hasil ini
diperoleh dari 2*2 sampai bilangan 10 yang pangkatnya adalah 100, hasil ini
diperoleh dari 10*10.



Algoritma dari permasalahan diatas adalah berikut ini :
1. Tentukan elemen array untuk menampung nilai perkalian
2. Tentukan nilai awal indeks, batas akhir indeks dan kenaikannya (dalam
hal ini , nilai awal indeks adalah 0, batas akhir indeks adalah 10, dan
kenaikannya adalah
3. Lakukan perulangan sesuai langkah 2
4. Nilai awal indeks ditambah dengan 1
5. Lakukan perkalian masing-masing elemen array sampai batas akhir
indeks terpenuhi.
6. Tampilkan perkalian semua elemen array
7. Selesai .
Contoh program array dimensi satu

Gambar 3.2 Program Array Dimensi Satu
Bila program dijalankan akan muncul hasil :
Pangkat dari 1 adalah 1
Pangkat dari 2 adalah 4
Pangkat dari 3 adalah 9
Pangkat dari 4 adalah 16
Pangkat dari 5 adalah 25
Pangkat dari 6 adalah 36
Pangkat dari 7 adalah 49
Pangkat dari 8 adalah 64
Pangkat dari 9 adalah 81
Pangkat dari 10 adalah 100
Penjelasan :
Dari program diatas, Anda dapat melihat ada 10 buah elemen yang masing-
masing nilainya akan dipangkatkan, mulai dari 1 sampai 10. Dimana dalam
memori sudah dipesan tempat sebanyak 100.
Sedangkan apabila array akan dikirim ke sebuah fungsi caranya adalah hanya
dengan mencantumkan nama array tanpa diikuti dengan tanda apapun, seperti
contoh berikut :
int c[5] = {-45, 0, 6, 72, 1543};


JUMLAH (c, 5)
-
Dalam contoh diatas, yang memanggil fungsi JUMLAH dengan mengirimkan
argument berupa variable array c dan sebuah konstanta 5. Perhatikan bahwa
variable array ditulis hanya c tanpa notasi tambahan apapun. Deklarasi variable
array yang menjadi parameter dari suatu fungsi dituliskan dengan nama variable
array yang diikuti dengan tanda kurung [], tanpa menuliskan banyaknya lokasi
memori yang diinginkan.

ARRAY DIMENSI DUA

Struktur array yang dibahas diatas mempunyai satu dimensi, sehingga
variabelnya disebut variable array berdimensi satu. Pada bagian ini ditunjukkan
array berdimensi lebih dari satu, yang sering disebut dengan array berdimensi
dua.

Sebagai contoh, sebuah matrik B berukuran 2 X 3 dapat dideklarasikan dalam C
seperti berikut : int B[2][3] = {[2, 4, 1}, {5, 3, 7}}; yang menempati lokasi memori
dengan susunan sebagai berikut :

0 1 2
0 2 4 1
1 5 3 7
Dan definisi variable untuk setiap elemen tersebut adalah :
0 1 2
0 b[0][0] b[0][1] b[0][2]
1 b[1][0] b[1][1] b[1][2] Sebagai implementasi dari keterangan diatas, perhatikan
program berikut ini :
Contoh Program array dimensi dua

Gambar 3.3 Program Array Dimensi Dua
Bila program diatas dijalankan, akan mucul hasil :
123
456
123
450
120
400
Penjelasan :
Dari program diatas untuk matrik 1, penulisannya adalah 123 456, sedangkan
pada matrik 2 penulisannya adalah 123 450. 0 disini mempunyai arti tempat yang
disediakan untuk data kolom ke 3 dan baris ke 2 tidak diisi. Sedangkan matrik 3
penulisannya adalah 120 400. Dari matrik 3 disini kita bisa melihat bahwa pada
baris pertama kolom ketiga data tidak diisi dan dianggap 0 dan pada baris kedua
kolom kedua dan ketiga juga tidak diisi juga diisi 0.

Dalam program tersebut, juga digunakan fungsi untuk menampung hasil
penjumlahan matrik.

Perhatikan contoh lain :
Int datasiswa[4][3];
Deklarasi diatas digunakan untuk mendeklarasikan suatu data siswa yang
berbentuk demikian :
No Nama Kelas Jumlah Siswa
Tahun 1989 Tahun 1990 Tahun 1991
1 Kelas 1 50 55 49
2 Kelas 2 60 60 55
3 Kelas 3 56 56 56
4 Kelas 4 49 50 54

Dari deklarasi diatas maka angka empat [4] menyatakan jumlah kelas, dan angka
indek [3] menyatakan tahun. Data siswa [0][2] adalah Kelas 1 dan jumlah siswa
tahun 1990 yaitu 55. Atau jumlah siswa kelas 1 pada tahun 1990 adalah 55.
Bentuk data siswa dapat juga digambarkan sebagai berikut :

1 2 3
1 50 55 49
2 60 60 55
3 56 56 56
4 49 50 54
Array ini dapat pula diberi nilai tetap dengan static seperti pada array dimensi
satu. Deklarasinya adalah sebagai berikut :
Static int jumlah [4][3]=
{
50, 55, 49,
60, 60, 55,
56, 56, 56,
49, 50, 54
};


ARRAY DIMENSI BANYAK

Array ini seperti array dimensi dua tetapi dapat memiliki ukuran yang lebih besar.
Sebenarnya array dimensi banyak ini tidak terlalu sering digunakan, tetapi
sewaktu-waktu kalau dimensi yang dibutuhkan banyak, maka array ini sangat
memegang peranan yang penting.

2. Membangkitkan Bilangan Random
Terdapat dua fungsi yang dibutuhkan untuk membangkitkan bilangan
acak srand() dan rand(). Fungsi srand() dibutuhkan untuk menentukan "bibit" dari
bilangan acak yang akan dibangkitkan. Sama seperti kalau kita menanam
tumbuhan, bibit yang berbeda tentu akan menghasilkan tambuhan dewasa yang
berbeda pula. Sedangkan fungsi rand() digunakan untuk menampilkan bilangan
acak yang dihasilkan dari "bibit" yang diberikan ke fungsi srand().

Bentuk umum dari fungsi srand() adalah:
view plainprint?
1. srand(bibit);


Sebagai Contoh:
view plainprint?
1. srand(4);



Bentuk umum dari fungsi rand() adalah:

view plainprint?
1. rand() % n;

Bilangan acak yang dihasilkan oleh fungsi rand() adalah dari 0 s/d (n-1).


Sebagai contoh:

view plainprint?
1. rand() % 10;


Perintah di atas akan menghasilkan bilangan antara 0 s/d 9.
Seperti yang sudah dijelaskan sebelumnya, jika kita menggunakan "bibit" yang
sama maka hasil yang diperoleh dari bibit ini pastilah sama. Untuk membuktikan,
cobalah menjalankan program berikut berkali-kali dan perhatikan tampilan
dilayar:

view plainprint?
1. #include<iostream>
2. using namespace std;
3.
4. int main()
5. {
6. srand(5);
7. int data = rand() % 10;
8. cout << data << endl; cin.get(); }

Agar bisa membangkitkan bilangan yang benar-benar acak, kita harus
memberikan "bibit" yang berbeda-beda pula kepada fungsi srand(). Salah satu
cara yang bisa dilakukan adalah memberikan "bibit" menggunakan fungsi time(),
seperti berikut:


view plainprint?
1. srand(time(NULL));



Sekarang, cobalah jalankan program berikut beberapa kali, dan perhatikan
keluaran yang ditampilkan ke layar.

view plainprint?
1. #include<iostream>
2. using namespace std;
3.
4. int main()
5. {
6. srand(time(NULL));
7. int data = rand() % 10;
8. cout << data << endl; cin.get(); }

Fungsi rand() umumnya digunakan untuk membangkitkan bilangan acak yang
bertipe bilangan bulat.

3. sorting dan searching

sorting atau pengurutan merupakan operasi yang sering digunakan dalam
pemrograman dan ssering dihubungkan denganoperasi searching. Berbagai
algoritma untuk proses searching dan sorting telah dikembangkan. Pilihan terbaik
untuk algoritma sorting tergantung pada banyaknya data dan tipe datanya.
Elemen-elemen yang akan diurutkan tersusun sebagai suatu barisan linear(list),
dan semua data tersebut dapat dibandingkan antara satu dengan yang lainnya.

Searching merupaka hal yang sangat penting dalapm aplikasi computer. Untuk
memperoleh informasi tersebut kita harus mencarinya dari sebuah table, basis
data atau gudang informasi. Dari sepotong informasi, yang selanjutnya disebut
kunci (key), kita dapat mencari informasi lebih lengkap yang berhubungan
dengan kunci tersebut. Dalam program aplikasi, proses searching sering kali
merupakan kegiatan yang memakan banyak waktu. Oleh karena itu, perbedaan
cara penataan record-record dan metode searching dapat memberikan
perbedaan yang signifikan terhadap kinerja program.

4. Insertion short
Metode penyisipan (Insertion sort)
bertujuan untuk menjadikan bagian sisi kiri array terurutkan sampai dengan
seluruh array berhasil diurutkan. Metode ini mengurutkan bilangan-bilangan yang
telah dibaca; dan berikutnya secara berulang akan menyisipkan bilanganbilangan
dalam array yang belum terbaca ke sisi kiri array yang telah terurut.

Alghoritma Metode Insertion short
1. i 1
2. selama (I < n) kerjakan baris 3 sampai dengan 9
3. key A [ i ]
4. j I 1
5. Selama j >= 0 dan (A[ j ] > key) kerjkan baris 6 dan 7
6. A [ j +1] A [ j ]
7.j j -1
8. A [ j+1] key
9. i i + 1














Contoh Program

1 for(i=1;i<=n;i++){
2 temp = data[i];
3 j = i -1;
4 while(data[j]>temp && j>=0)
5 {
6 data[j+1] = data[j];
7 j--;
8 }
9 data[j+1] = temp;
10 cout<<"Proses "<<i<<" : ";
11 list (n);
12 }

Bubble short
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.
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.
Algoritma Bubble Sort
1. Membandingkan data ke-i dengan data ke-(i+1) (tepat bersebelahan). Jika
tidak sesuai maka tukar (data ke-i = data ke-(i+1) dan data ke-(i+1) = data
ke-i). Apa maksudnya tidak sesuai? Jika kita menginginkan algoritme
menghasilkan data dengan urutan ascending (A-Z) kondisi tidak sesuai
adalah data ke-i > data ke-i+1, dan sebaliknya untuk urutan descending (A-
Z).
2. Membandingkan data ke-(i+1) dengan data ke-(i+2). Kita melakukan
pembandingan ini sampai data terakhir. Contoh: 1 dgn 2; 2 dgn 3; 3 dgn 4; 4
dgn 5 ; n-1 dgn n.
3. Selesai satu iterasi, adalah jika kita sudah selesai membandingkan antara
(n-1) dgn n. Setelah selesai satu iterasi kita lanjutkan lagi iterasi berikutnya
sesuai dengan aturan ke-1. mulai dari data ke-1 dgn data ke-2, dst.
4. Proses akan berhenti jika tidak ada pertukaran dalam satu iterasi.




Contoh Program

#include<stdio.h>
void bubbleSort(int data[], int n){
int i, j=0, temp, flag = 1;
while(flag){
flag = 0;
for(i=0; i<n; i++){
if(data[i]>data[i+1]){
temp = data[i];
data[i] = data[i+1];
data[i+1] = temp;
flag++;
}
}
}
}
main(){
int data[1000];
int n, i;
printf("________.:: BUBBLE SORT :.________\n");
printf("Enter numbers of data(maks 1000): ");
scanf("%d", &n);
printf("Data (separate by space): ");
for(i=0; i<n; i++)
scanf("%d", &data[i]);
bubbleSort(data, n);
printf("\nOutput after sort:\n");
for(i=0; i<n; i++)
printf("%d ", data[i]);
getch();
return 0;}


Quick Short
Pengertian Quick Sort
Algoritma sortir yang efisien yang ditulis oleh C.A.R. Hoare pada 1962. Dasar
strateginya adalah memecah dan menguasai. Quicksort dimulai dengan
menscan daftar yang disortir untuk nilai median. Nilai ini, yang disebut tumpuan
(pivot), kemudian dipindahkan ke satu sisi pada daftar dan butir-butir yang
nilainya lebih besar dari tumpuan di pindahkan ke sisi lain.
Algoritma Quick Sort
Divide
Memilah rangkaian data menjadi dua sub-rangkaian A[pq-1] dan A[q+1r]
dimana setiap elemen A[pq-1] adalah kurang dari atau sama dengan A[q]
dan setiap elemen pada A[q+1r] adalah lebih besar atau sama
dengan elemen pada A[q]. A[q] disebut sebagai elemen pivot.
Perhitungan pada elemen q merupakan salah satu bagian dari prosedur
pemisahan.
Conquer
Mengurutkan elemen pada sub-rangkaian secara rekursif Pada algoritma quick
sort, langkah kombinasi tidak di lakukan karena telah terjadi pengurutan
elemen elemen pada sub array.
Implementasi Quic Sort Menggunakan C/C++

Partition(A, p, r)
x = A[p]; //pivot=elemen posisi pertama
i = p ; //inisialisasi
j = r ;
repeat
while(A[j] > x)
j--;
while(A[i] < x)
i++;
if (i < j){
Swap(A, i, j);
j--;
i++
}
else
return j;
until i >= j


4. Sequential Search
Pencarian berurutan sering disebut pencarian linear merupakan metode
pencarian yang paling sederhana. Pencarian berurutan menggunakan
prinsip sebagai berikut : data yang ada dibandingkan satu per satu secara
berurutan dengan yang dicari sampai data tersebut ditemukan atau tidak
ditemukan.

Pada dasarnya, pencarian ini hanya melakukan pengulangan dari 1
sampai dengan jumlah data. Pada setiap pengulangan, dibandingkan data
ke-i dengan yang dicari. Apabila sama, berarti data telah ditemukan.
Sebaliknya apabila sampai akhir pengulangan tidak ada data yang sama,
berarti data tidak ada. Pada kasus yang paling buruk, untuk N elemen data
harus dilakukan pencarian sebanyak N kali pula.


Algoritma pencarian berurutan dapat dituliskan sebagai berikut :
1 i 0
2 ditemukan false
3 Selama (tidak ditemukan) dan (i <= N) kerjakan baris 4
4 Jika (Data[i] = x) maka ditemukan true, jika tidak i i + 1
5 Jika (ditemukan) maka i adalah indeks dari data yang dicari, jika tidak
data tidak ditemukan

Contoh Program

int SequentialSearch(int x)
{
int i = 0;
bool ditemukan = false;
while ((!ditemukan) && (i < Max))
{
if(Data[i] == x)
ditemukan = true;
else
i++;
}
if(ditemukan)
return i;
else
return -1;
}

Fungsi diatas akan mengembalikan indeks dari data yang dicari. Apabila data
tidak ditemukan maka fungsi diatas akan mengembalikan nilai 1.
5. Pencarian Biner (Binary Search)
Salah satu syarat agar pencarian biner dapat dilakukan adalah data sudah
dalam keadaan urut. Dengan kata lain, apabila data belum dalam keadaan
urut, pencarian biner tidak dapat dilakukan. Dalam kehidupan sehari-hari,
sebenarnya kita juga sering menggunakan pencarian biner. Misalnya saat
ingin mencari suatu kata dalam kamus Prinsip dari pencarian biner dapat
dijelaskan sebagai berikut : mula-mula diambil posisi awal 0 dan posisi
akhir = N - 1, kemudian dicari posisi data tengah dengan rumus (posisi
awal + posisi akhir) / 2. Kemudian data yang dicari dibandingkan dengan
data tengah. Jika lebih kecil, proses dilakukan kembali tetapi posisi akhir
dianggap sama dengan posisi tengah 1. Jika lebih besar, porses
dilakukan kembali tetapi posisi awal dianggap sama dengan posisi tengah
+ 1.

Algoritma Binary Search
1. L 0
2. R N - 1
3. ditemukan false
4. Selama (L <= R) dan (tidak ditemukan) kerjakan baris 5 sampai dengan
8
5. m (L + R) / 2
6. Jika (Data[m] = x) maka ditemukan true
7. Jika (x < Data[m]) maka R m 1
8. Jika (x > Data[m]) maka L m + 1
9.Jika (ditemukan) maka m adalah indeks dari data yang dicari, jika tidak
data tidak ditemukan.

Contoh Program

int BinarySearch(int x)
{
int L = 0, R = Max-1, m;
bool ditemukan = false;
while((L <= R) && (!ditemukan))
{
m = (L + R) / 2;
if(Data[m] == x)
ditemukan = true;
else if (x < data[m])
R = m - 1;
else
L = m + 1;
}
if(ditemukan)
return m;
else
return -1;
}

Fungsi diatas akan mengembalikan indeks dari data yang dicari. Apabila data
tidak ditemukan maka fungsi diatas akan mengembalikan nilai 1.













6. Flowchart Insertion Sort






























Begin
x,y,n,s : integer
bil : array[1..100]]
oof integer
Input : n
x 1
n > x
Input : bil[x]
x x+1
X
X
x 1
n >=x
y x+1
bil[x]<bil[y]
bil[y] s
bil[x] bil[y]
s bil[x]
n<=y
a a+1
y y+1
x 1
n >=x


Begin
Output : bil[x]
End
x x+1
Z
Z
Y
T
T
Y
T
Y
Y
Y
Y
T
T
Y
Gambar 3.4 Flowchart Insertion Sort
Pseudocode
Deklarasi
x,y,n, s: integer
bil: array [1..100] of integer

Deskripsi
Input n
For x 1 to n do
Input bil[x]
for x 2 to n do
tempbil[x] {ambil elemen bil[x] agar nilainya tidak dihilang
karena tertimpa pergeseran}
bil[x]bil[y];
bil[y]s;
y=x-1 {cari posisi yang tepat untuk bil[x] di dalam bil[1..x-1] sambil
menggeser}
while bil[y]>s do
bil[y+1]bil[y]; {pergeseran}
yy-1;
endwhile;
A[j+1]s {menemukan tempat yang tepat}
endfor;

Tracing

Input :
N = 4
bil[1] = 2
bil[2] = 5
bil[3] = 4
` bil[4] = 1

Proses :
x = 1 2 3 4 5 1 2
y = 2 3 4 2 3 4
bil[1] = 1
bil[2] = 4 2
bil[3] = 5 4
bil[4] = 2 4 5

Output :
bil[1] = 1
bil[2] = 2
bil[3] = 4
bil[4] = 5



Bubble Sort

Flowchart



























Y Y+1 Y>X-1
Y1
Output :
N[Y]
YY+1
Y > X
End
T
T
T
T
Y
Begin
N : array[1..100] of
integer
X,Y,Z,s : integer

Input : X
Y 1
Input : N[Y]
YY + 1
Y > X
Y 1
Z Y+1
N[Y]>N[Z
]
S N[Y]
N[Z] N[Y]
Z + 1 Z > X
T
Y
Y
Y
Y
Gambar 3.5 Flowchart Bubble Sort
Pseudocode

Deklarasi
N : array[1100]of integer;
x, y,z, s : integer;

Deskripsi
for x1 to x do;
input bil[y];
for x1 to x-1 do;
for y y+1 to x do
if bil[y] > bil[z] then
sbil[z];
bil[z]bil[y];
bil[y]s;
endif;
endfor;
endfor;
for y1 to x do
output bil[y];


Tracing
Input :
x = 3
bil[1] = 3
bil[2] = 4
bil[3] = 2

Proses :
y = 1 2 3 4 1 2 3 1 2 3
z = 1 3 4 3 4
s = 1 2
bil[1] = 2
bil[2] = 3
bil[3] = 3 4

Output :
bil[1] = 2
bil[2] = 3
bil[3] = 4







Quick Sort
Flowchart


























start
Input n
For i=1 to n
Input a[i]
Next i
i low;
xa [low];
For j=low+1 to high
If x>= a[j]
ta[i] ;
a[i]a[j] ;
a[j]t ;

A
Next j
n
y
Gambar 3.6 flowchart quick sort (a)
















Pseudocode
Deklarasi
1. a=array[1..n] of integer ;
2. t, j, x, w, p, i, low, high, k, l, h : integer ;
Deskripsi
Begin
Input n
for i1 to n do
readln (a[i]);
i low;
xa [low];
For j low +1 to high do
If x>= a[j] then
Begin
ta[i] ;
a[i]a[j] ;
a[j]t ;
end;
ta[low] ;
a[low]a[i] ;
a[i]t ;
Split(l,h,w)
Qsort (l,w-1)
Qsort (w+1, h)
A
ta[low] ;
a[low]a[i] ;
a[i]t ;

k i;

If i < h
then
end
y
n
Gambar 3.7 flowchart quick sort (b)
k i;
Begin
If l < h then
begin
Split(l,h,w) ;
Qsort (l,w-1) ;
Qsort (w+1, h) ;
end;
End;
Begin
qsort( 1, n);
for p 1 to n do
write (a[p], );
readln;
End;
End.

Tracing
Input
N:=4
r:= 14,6,9,11
proses
i:=1
x=14
j=2
14>=6
t=14
a[1]=6
a[2]:=14

next j
i:=2
x=14
j:=3
14>=9
t=14
a[2]=9
a[3]:=14
next j
i:=3
j:=4
14>=11
a[3]=11
a[4]=14
end

output
6,9,11,14

Sequental Search

Flowchart
























Pseudocode

Deklarasi
n, a, c : integer
Output : Bilangan
yang dicari tidak
ada
Output : bil[i]
End
N
Y
Input bil[a]
a a + 1
a <= n
Begin
n, a, c :
integer
Input (n)
a 1
N
Y
a a + 1
a =< n
Y
N
a 1
Input bilangan yang
dicari (c)
a = c
Gambar 3.8 Flowchart Sequental Search

Deskripsi
Input n;
For a 1 to n do
Input bil[a];
Endfor;
input(x);
ketemu=false {inisialisasi belum ditemukan}
i=1 ;

while (ketemu=false) and (i<=n) do
if A[i]=x then
ketemu=true {menghentikan proses pencarian}
posisi=i
else i=i+1 {maju ke elemen berikutnya} 237
endif;
endwhile;

if ketemu=false then write (Tidak ketemu)
else
write (Data ditemukan);
output (posisi);
endif;


Tracing
Input :
N = 3
bil[1] = 7
bil[2] = 8
bil[3] = 6
c = 8

Proses :
i = 1 2
bil[2] = 8

Output
bil[2] = 8



Binary Search
Flowchart



















Pseudocode
Deklarasi
n, I, c : integer

Deskripsi
Input n
Input bilangan yang sudah terurut
Input bil[c]
in div 2
if c > i then
else
i(n-1) div 2
Y
Begin
End
n, i, c : integer
Input : n
Input : bilangan yg
dicari (c)
Output: c
i n div 2
c = i c > i
I (n-i) div 2
I (n+i) div 2
Y N
Input : deret
bilangan terurut (n)
Gambar 3.9 Flowchart Binary Search
endif;
if c = i then
output c {posisi data yang dicari}
endif;


Tracing
Input:
n = 4
deret bilangan sebanyak n = 1 3 5 7
c = 5

Proses:
i = 2 3

Output:
Bil[c] = 5

Anda mungkin juga menyukai