TIKK 105
Definisi Logika
• Logika identik dengan masuk akal dan penalaran. Penalaran
adalah salah satu bentuk pemikiran. Pemikiran adalah
pengetahuan tak langsung yang didasarkan pada pernyataan
langsung pemikiran mungkin benar dan mungkin juga tak
benar.
I P O
Contoh
• Isi bejana A dan bejana B akan saling ditukar
Bejana A Bejana B
Pemecahannya
Bejana B
Bejana A
Bejana B Bejana C
Bejana A
Bejana B Bejana C
Bejana A
Bejana B Bejana C
Bejana A
Bejana B Bejana C
Bejana A
Bejana B
Bejana A
Asal-usul kata algoritma
• Abu Ja’far Muhammad Ibnu Musa Al Khuwarizmi adalah
seorang penulis buku Arab yang berjudul Kitab Al Jabar Wal
Muqabala (Buku Pemugaran dan Pengurangan). Kata Al
Khuwarizmi dibaca orang Barat menjadi algorism.
• Kata algorism berarti proses menghitung dengan angka Arab.
Seseorang dikatakan algorist jika orang tersebut
menggunakan angka Arab.
• Kata algorism lambat laun menjadi algorithm disebabkan kata
algorism sering dikelirukan dengan kata arithmetic sehingga
akhiran –sm berubah menjadi –thm. Kata algorithm diserap
ke dalam bahasa Indonesia menjadi algoritma.
Domain algoritma
teh kopi
Contoh Lain (Continue)
Algoritma
– Siapkan gelas cadangan X
X
kopi X
– Tuangkan isi gelas
Latihan 1
1. Integrity / keutuhan
2. Clarity / kejernihan (mudah & jelas)
3. Simplicity / kesederhanaan
4. Efficiency (memori)
5. Modularity
6. Generality
Syarat algoritma
• Menghasilkan solusi dalam waktu singkat
• Sederhana, jelas, tepat dan tidak menimbulkan
arti ganda
• Menggunakan bahasa standart
• Mudah diimplementasikan ke dalam bahasa
pemrograman
• Efektif
• Tiap operasi terdefinisi dengan jelas
• Menggunakan logika perhitungan/metode yang
tepat
• Semua proses harus berakhir
Notasi Algoritma
• Algoritma independen terhadap bahasa
pemrograman & jenis komputer
Struktur dasar algoritma
1. Sequence / urutan
Yaitu suatu proses akan dilakukan/diselesaikan
terlebih dahulu sebelum mengerjakan proses lain
(pengerjaanya dilakukan secara berurutan)
2. Selection / Pemilihan
Yaitu suatu proses pengkondisian yang digunakan
untuk menentukan urutan proses yang harus
dilakukan berdasarkan kriteria tertentu
3. Iterasi / looping / pengulangan
Yaitu suatu proses yang dapat dilakukan lebih dari
satu kali secara otomatis maupun berdasarkan
kriteria tertentu
Penyajian Algoritma
Penyajian algoritma
• Contoh : Seorang peserta test dengan nomor test tertentu harus mengerjakan
empat macam test. Hasil test tersebut adalah nilai_1, nilai_2, Nilai_3 dan
Nilai_4. Apabila rata-rata dari kempat nilai test tersebut lebih besar atau sama
dengan 60 maka peserta test itu lulus bila tidak gagal. Buat algoritma untuk
mencari hasil test dan predikat kelulusan dari seorang peserta test.
• Pemecahan 1 :
Deklarasi : no peserta = text, nilai_1, nilai_2, nilai_3 dan Nilai_4 = bil. Bulat,
rata-rata = bil. Pecahan, predikat = text.
Deskripsi : Inputkan nomor test peserta, lalu inputkan nilai_1, nilai_2, nilai_3
dan Nilai_4. Hitung rata-rata nilai peserta dan tentukan predikatnya dengan
membandingkan rata-rata nilai dengan 60, bila nialai rata-rata lebih besar atau
sama dengan 60 berarti lulus bila tidak gagal.
• Pemecahan 2 :
Deklarasi :
no peserta = text,
nilai_1, nilai_2, nilai_3 dan Nilai_4 = bil. Bulat,
rata-rata = bil. Pecahan,
predikat = text
Deskripsi :
1. Inputkan nomor peserta
2. Inputkan nilai_1, nilai_2, nilai_3 dan Nilai_4
3. Hitung rata-rata nilai peserta
4. Bandingkan nilai rata-rata dengan 60. Bila nilai rata-rata >= 60
lakukan langkah 5, bila tidak lakukan langkah 6
5. Nomor peserta tersebut berpredikat lulus
6. Nomor peserta tersebut berpredikat gagal
Contoh Penulisan Pseudocode
1. Untuk proses pembacaan data 4. Untuk proses inisialisasi nilai awal
READ student_name Initialize total accumulators to zero
GET system-date Set student_cont to 0
READ member_1, member_2 Store cust_num in last_cust_num
BACA record mahasiswa 5. Untuk proses perbandingan / seleksi
BACA nilai_mahasiswa
IF student is parttime THEN
2. Untuk proses penyajian informasi ADD 1 to part_time_count
PRINT ‘STMIK Widya Dharma’ ELSE
WRITE student_record ADD 1 to full_time_count
DISPLAY ‘Invalid’ ENDIF
CETAK ‘STMIK Widya Dharma’ 6. Untuk proses pengulangan
CETAK record_mahasiswa
DO WHILE student_count < 50
3. Untuk proses aritmatika READ student record
PRINT student_name
ADD number to total ADD 1 to student_total
total = total + number ENDDO
PRINT total by student_count
a=a*b
x=y+z
Contoh Penulisan Pseudocode
Contoh Lain untuk Perbandingan / Seleksi
a) Simple IF (Without ELSE)
IF nilai a = nilai b THEN
CETAK ‘Nilai A = Nilai B’
ENDIF
Penghubung dalam
Operasi input-output satu halaman
Proses
Penghubung antar Menunjukkan arah
Simbol persiapan Simbol awal dan Simbol keputusan
akhir
Simbol-simbol untuk system flowchart
Simbol dokumen Simbol Media penyimpan
(single /multi Simbol kegiatan manual offline (arsip-manual)
dokumen)
Proses pengurutan Simbol Pita mangnetik Simbol harddisk
data (manual)
Simbol diskette Simbol manual input Simbol display
• Sequence / urutan
Proses A
Proses B
• Pemilihan
If condition is true
True
Do task A
Kondisi else
Do task B
False end-if
Task A Task B
If Condition 1 id true
Do task A
True False Else
Kondisi If Condition 2 is true
Dos Task B
T Else
Kondisi False If Condition 3 is true
Task A
Do Task c
Task B false Else
True Kondisi :
:
Task B Task B End-if
end-if
end-if
Case of Condition
Condition-1 : Do Task-A
Kondisi Condition-1 : Do Task-A
Condition-1 : Do Task-A
:
Task A Task B Task C Task N :
End-case
Iterasi/Looping/pengulangan
Proses A
Kondisi
True Proses B
kondisi
False Proses A
True
Proses B
For ….to…do
atau
for … downto ….do
Proses A
Contoh
Mulai
Nomor test,
Nilai_1, Nilai_2,
Nilai_3, Nilai_4
T
Predikat “lulus”
Rerata
< 60
Y
Predikat “gagal”
Selesai
Nassischneidermann Diagram
Operation B
Operation
Operation C
2. Pilihan/ selection
Case Of
Condition
Yes No
Value A Value B Value C Value D
Operation A Operation B
Operasi A Operasi B Operasi C Operasi D
Condition
Yes No
Operation A No.Operation
Contoh : Mencari total & Rata-rata
Total 0 , Counter 0, bil 0
Read bil
Counter Counter + 1
Read bil
If Counter > 0
Yes No
Repeat
Statement A
Statement B
Proses yang diulang :
Until Kondisi
kondisi
salah
benar
Proses B
Conditional Loop
While kondisi do
Statement_1
False
kondisi Statement_2
:
True Statement_n
endwhile
Proses yang diulang Proses B
Loop Controlled input
Deskripsi
input(mata_kuliah)
While matakuliah <> ‘habis’
output(‘nama mata kuliah =‘, mata_kuliah)
input(nama, tk,mt,ta)
While nama <> ‘*****’
na 0.20*tk + 0.30 *mt +0.50*ta
output (‘Nama =‘, nama)
output(nilai Akhir =‘, ta)
input(nama, tk,mt,ta)
endwhile
input(mata_kuliah)
endwhile
Pemetaan
Counted loop
Nested loop
Latihan
1. Tampilkan bilangan genap yang berada diantara 0
sampai 100.
2. Buatlah flowchart yang berfungsi untuk
memberikan keterangan atas suatu angka yang
diinputkan, apakah angka tersebut merupakan
bilangan ganjil atau genap. Proses diatas akan
tetap dilakukan (diulang terus) sampai angka yang
diinputkan adalah 0
3. Perkalian sebenarnya merupakan proses
penjumlahan yang dilakukan secara berulang-
ulang sampai batas pengalinya.
4. Proses Pembagian sebenarnya merupakan proses
pengurangan yang dilakukan secara berulang
sampai bilangan yang dibagi lebih kecil dari
pembaginya. Sisa dari pengurangan tersebut
merupakan sisa dari proses pembagian,
sedangkan banyaknya pengurangan merupakan
hasil baginya.
ALGORITMA & SUB
ALGORITMA
Algoritma & sub Algoritma
• Menurut Al-Khuwarizmi
Untuk mencapai tujuan besar, maka tujuan
tersebut harus dibagi-bagi menjadi tujuan kecil
sampai tujuan kecil itu merupakan tujuan yang
dapat dicapai berdasarkan kondisi dan potensi
yang dimiliki saat itu.
Pemrograman Modular
Memecah program besar menjadi beberapa sub
program (routine) yang lebih kecil
• Keuntungan
– menjadi sederhana
– Menghindari penulisan yang sama berulangkali
– Dapat mengurangi panjang program/algoritma
Sub Algoritma
• Komponen algoritma yang terpisah dari
algoritma utamanya atau berdiri sendiri tapi
diproses dibawah kendali algoritma utama
• Dibedakan menjadi :
1. Procedure
2. Function
Gambaran umum
Algoritma utama Sub Algoritma A
: :
: Return
Panggil Sub Algoritma A
:
Panggil Sub Algoritma B Sub algoritma B
: :
exit return
Procedure
• Sub algoritma yang diaktifkan dengan perintah
Call dan diikuti dengan nama procedure dan
parameternya;
• mempunyai satu output atau lebih; atau sama
sekali tidak
Procedure
Format Penulisan :
– Procedure nama_procedure;
– Procedure nama_procedure[parameter1, parameter2 ,……]
• Format pemanggilan
– Call nama_procedure
– Call nama_procedure[argumen1, argumen2 ,……]
• Contoh :
Procedure Bagi(dibagi, pembagi bil. Bulat; hasil,sisa bil.
real)
Call Bagi(para_1,para_2,para_3,Para_4)
Procedure
• Contoh :
– Procedure Bagi[dibagi, pembagi,hasil,sisa]
– Call bagi(10,5,hasilnya,sisanya)
Contoh sub algoritma : Contoh pemanggilan :
Deklarasi
Procedure Tukar[X,Y bil. bulat]
A,B bil. bulat
Deklarasi Deskripsi
Sementara bil bulat Read (A,B)
Dekripsi : Call Tukar [A,B]
Sementara X Write(A, ‘ ‘,B)
XY
Y Sementara
Return
Function
• Sub algoritma yang diproses langsung dalam
suatu ekspresi dan selalu menghasilkan satu nilai
output
• Pada awal penulisan sub algoritma function harus
dituliskan nama dan parameternya
Formatnya :
Function nama(daftar parameter)
Contoh :
Function RataRata(Nilai_1, Nilai_2, Nilai_3, Nilai_4 bil.
bulat)
Function
a = 10 b = 20 c = 30
x = 40 y = 50 z = 60
Maka Hasilnya :
a=0 b=0 c=0
x = 40 y=0 z = 60
Keterangan :
• a adalah variabel global yang dikenal di algoritma utama
maupun di sub algoritma karena disub Algoritma reset
nilai a (diisi 0) maka nilai a pada algoritma utama juga
akan berubah menjadi 0.
• Ada 2 variabel x, pada sub algoritma yang merupakan
variabel lokal dan pada algoritma utama yang merupakan
variabel global.
• Nilai variabel lokal x tidak akan dikenal oleh algoritma
utama sehingga nilai x pada algoritma utama tetap 40
walaupun pada sub algoritma nilai x diberi nilai 0.
• Perhatikan bahwa parameter x pada algoritma utama
dipanggil dengan argumen y sehingga nilai variabel y
yang direset.
• Variabel lokal dapat diubah menjadi variabel global
dengan menggunakan perintah public
HUBUNGAN BERULANG &
REKURSIF
Rekursif
• Rekursif adalah procedure atau function yang
mengandung atau mendefinisikan dirinya sendiri
• Setiap suatu procedure/function dipanggil maka nilai
argumennya akan berubah dan proses berhenti jika
telah mencapai kondisi tertentu
• Prinsip yang digunakan adalah LIFO (Last In Last
Out)
Rekursif dibedakan menjadi :
• REKURSIF LANGSUNG
Yaitu bila procedure/function tersebut memanggil dirinya
sendiri
Procedure tampil
Write (‘Halo’)
I ← I +1
If I < 5 then call tampil
Endif
return
Contoh rekursif langsung
Misal n = 4
Faktorial(0) 1
Faktorial(1) 1 * faktorial(1-1) 1*1
Faktorial(2) 2 * faktorial(2-1) 2 * (1 * 1)
Faktorial(3) 3 * faktorial(3-1) 3 * (2 * (1 * 1))
Faktorial (4) 4 * faktorial(4-1) 4 * (3 * (2 * (1 * 1)))
Contoh rekursif tak langsung
Procedure contoh1
Writeln (‘Stiki Malang’)
Call contoh2
Return
Procedure contoh2
Write (‘Jl. Tidar 100’)
For I ← 1 to 3 do Call contoh1
Write(‘OK’)
Return
Function pangkat (x, y)
Hasil ← 1
If y = 0 then pangkat(x,y) ←1
Else
Hasil ← x * pangkat(x, y-1)
Endif
Return
ARRAY
Satu dimensi & multi dimensi
Definisi
• Merupakan tipe terstruktur yang mempunyai satu
nama dan satu tipe data, serta elemen dalam
jumlah yang tetap sehingga untuk membedakan
antar data yang satu dengan yang lain digunakan
indek
• Posisi tiap-tiap elemen dinyatakan sebagai nomor
indek yang dapat diakses melalui nama
variabelnya diikuti nomor indek yang diapit dalam
tanda kurung siku ( [ ] )
definisi
• Satu identifier bisa menyimpan lebih dari satu nilai /
elemen
• Memiliki karakteristik spt yg distrukturkan dan tipe
tiap elemennya sama
• Bentuk umum :
Keterangan :
Tipe indek adalah batasan indek array
• Parameter tipe index :
– menentukan banyaknya elemen array
– Boleh bertipe apa saja kecuali tipe berkas (file)
– Bila bertipe ordinal (–32768 sampai dengan 65535)
struktur array tidak boleh melebihi 65520
– sub jangkauan / sub range harus ditulis batas bawah dan
batas atasnya dengan dipisahkan tanda titik-titik ( .. )
Pengaksesan array
• Dapat dilakukan dengan cara :
1. langsung pada index yang dibutuhkan
Contoh :
Write (Data[3])
read (Data[10])
2. menggunakan iterasi untuk pembacaan seluruh array
Contoh :
For I 1 to 10 do
Write (Data[i])
Endfor
Pemberian nilai Pada Array
• Dapat dilakukan dengan cara :
1. Memberikan nilai secara langsung pada indek yang
diinginkan
Contoh :
L[1] “Mira”
Data[5] 1000
2. Menggunakan iterasi/looping untuk memberi nilai mulai
index pertama sampai terakhir
Contoh :
For I 1 to 10 do
Data[I] 0
Endfor
Contoh
Deklarasi :
Grade : ‘A’..’E’
Nilai :char
Frek : array[grade] of integer
Cek : grade
Deskripsi :
For cek = ‘A’ to ‘E’ do
Frek[cek] 0
Endfor
For I 1 to 10 do
Repeat
Write(‘masukkan nilai siswa ke’,I,’=’)
Read(nilai)
Nilai upcase(nilai)
Until nilai in[‘A’..’E’]
Frek[nilai] frek[nilai]+1
Endfor
Array Multi Dimensi
• Bentuk umum :
Tmatrix = Array [tipe_index_1,tipe_index_2,…..] of tipe data;
• Alasan :
– Elemen 1 dengan index 0 digunakan oleh Pascal sebagai
penenda panjang array yang bersangkutan
– Dapat dikenai operasi khusus ( + untuk penggabungan)
– Panjang max adalah 255 karakter
• Bentuk umum :
Type
Pengenal = string<[panjang]>;
Keterangan :
Panjang adalah bilangan bulat (1 – 255 karakter)
Bila variabel ini tidak ada maka panjanganya adalah 255
karakter
• Karakter string dapat dimanipulasi seperti array
• Procedure/ Function standart yang dapat digunakan (pada Pascal) :
2. Binary search
Sequential Search
• Proses membandingkan nilai setiap elemen array
satu per satu secara berurutan dari elemen pertama
sampai data yang dicari ditemukan atau sampai
pada elemen terakhir
• Bila data yang dicari kembar maka data pada posisi
pertama yang akan diacu dan diproses
• Kelemahan :
– Lambat, waktu pencarian sebanding dengan jumlah
element array
– Tidak Praktis, makin banyak data makin lama proses
pencariannya
Deklarasi:
X, K, N : integer
L : array [1..100] of integer
Deskripsi
K1
While (K < N) and L[K] X do
K K+1
Endwhile
If L[K] = X then
Write(‘data ketemu pada indek ke’, K)
Else Write (‘data tidak ketemu)
Endif
Binary Search
• Syarat : Array harus urut
• Keuntungan :
– Proses pencari lebih cepat dibandingkan dengan
sequential seacrh karena jumlah pengecekan
sebanyak 2Log (N) kali sedangkan sequential search
sebanyak n kali.
– Untuk array yang berukuran 256 element
Sequential search Binary search
Pembandingan elemen Pembandingan dilakukan
dilakukan sebanyak 256 kali sebanyak 2Log (256) = 8 kali
Langkah pencarian
1. Bagi dua elemen array pada elemen tengah, yaitu elemen dengan
indek K= (I+J) div 2
Elemen K atau L[K], membagi array menjadi dua bagian yaitu :
bagian kiri L[I,J]
bagian kanan L[k+1..J]
2. Cek apakah L[K] = cari
Jika L[K] = cari, pencarian data dihentikan karena sudah ketemu
Jika L[K] cari maka harus ditentukan apakah pencarian akan
dilakukan di bagian kiri atau kanan
Bila L[K] < cari, maka pencarian dilakukan di bagian kiri ( j = k-
1)
Bila L[K] > cari, maka pencarian dilakukan di bagian kanan (I =
k+1)
3. Ulangi langkah a dan b sanpai cari ditemukan atau I > J (akhir dari
array)
Deklarasi:
I,J,K, Cari : integer
Ketemu : boolean
L : array[1..100] of integer
Deskripsi:
I1
JN
Ketemu false
While (Not Ketemu) and (I <= J) do
K (I+J) div 2
If L[K] = cari then ketemu true
Else
If L[K] > cari then I K+1 {Bagian kanan}
Else J K-1 {Bagian kiri}
Endif
Endif
Endwhile
If ketemu then write (‘data ketemu pada posisi’,K)
Else write(‘data tidak ketemu’)
Endif
Contoh Ilustrasi
• Misal array yang berukuran 8 elemen
Index 1 2 3 4 5 6 7 8
Data 5 8 12 18 25 37 39 50
Index 1 2 3 4 5 6 7 8
Data 5 8 12 18 25 37 39 50
kiri kanan
Langkah 2
L[4] = cari =18 ? ya… (cari ditemukan, pencarian dihentikan)
• Misal data yang dicari adalah 37 (cari = 37)
Langkah 1
• I=1
• J=8
• Indek elemen tengah : K = (1+8) div 2 = 4 (diarsir)
Index 1 2 3 4 5 6 7 8
Data 5 8 12 18 25 37 39 50
kiri kanan
• Langkah 2
• L[4] = cari = 37 ? tidak
• Tentukan arah pencarian dengan melakukan pengecekan
• Data[4] > 37 ? tidak…. Cari ke bagian kanan
• I = K+1 = 4+1 =5
• J = 8 (tetap)
• Indek tengah : K = (5+8) div 2 = 6
Index 1 2 3 4 5 6 7 8
Data 5 8 12 18 25 37 39 50
kiri
kanan
Index 1 2 3 4 5 6 7 8
Data 5 8 12 18 25 37 39 50
kiri kanan
Langkah 2
L[4] = cari = 8 ? tidak
Tentukan arah pencarian dengan melakukan pengecekan
Data[4] > 8 ? ya…. Cari ke bagian kiri
I = 1 (tetap)
J = K-1 = 4-1=3
Indek tengah : K = (1+3) div 2 = 2
Index 1 2 3 4 5 6 7 8
Data 5 8 12 18 25 37 39 50
kiri
kanan
Data 25 27 10 8 76 21
Langkah 5
Lokasi 1 2 3 4 5 6
1 25 27* 10* 8 76 21
2 25 10 27* 8* 76 21
3 25 10 8 27* 76* 21
4 25 10 8 27 76* 21*
5 25 10 8 27 21 76
Langkah 4
Lokasi 1 2 3 4 5 6
1 10 25* 8* 27 21 76
2 10 8 25* 27* 21 76
3 10 8 25 27* 21* 76
4 10 8 25 21 27 76
Langkah 3
Lokasi 1 2 3 4 5 6
Awal 10* 8* 25 21 27 76
1 8 10* 25* 21 27 76
2 8 10 25* 21* 27 76
3 8 10 21 25 27 76
Langkah 2
Lokasi 1 2 3 4 5 6
Awal 8* 10* 21 25 27 76
1 8 10* 21* 25 27 76
2 8 10 21 25 27 76
Langkah 1
Lokasi 1 2 3 4 5 6
Awal 8* 10* 21 25 27 76
1 8 10 21 25 27 76
Algoritma:
Deklarasi
I : bilangan bulat {untuk langkah}
J : bilangan bulat {indek}
Temp : bilangan bulat {untuk penampung sementara}
L : Array [1 ..N]
N : bilangan bulat {jumlah elemen array}
Deskripsi
For I (N-1) downto 1 do
For J 1 to I do
If L[J] > L [J+1] then
Temp L[J]
L[J] L[J+1]
L[J+1] temp
Endif
Endfor
Endfor
Selection sort
• Yaitu memilih nilai yang maksimum/minimum dari suatu array
yang akan diurutkan dan menempatkannya pada posisi awal
atau akhir array; selanjutnya elemen tersebut diisolasi dan
tidak disertakan pada proses berikutnya. Hal ini dilakukan
secara terus menerus sampai sebanyak N-1
• Dibedakan menjadi :
– Algoritma pengurutan maksimum
Yaitu memilih elemen maksimum sebagai basis pengurutan
– Algoritma pengurutan minimum
Yaitu memilih elemen minimum sebagai basis pengurutan
Contoh : Diurutkan secara ascending dengan algoritma
pengurutan minimum
Lokasi 1 2 3 4 5 6
Data 25 27 10 8 76 21
Langkah/ Lokasi 1 2 3 4 5 6
1 8 27 10 25* 76 21
2 8 10 27* 25 76 21
3 8 10 21 25 76 27*
4 8 10 21 25* 76 27
5 8 10 21 25 27 76*
Algoritma :
Deklarasi :
I : bilangan bulat {untuk langkah}
J : bilangan bulat {indek}
Temp : bilangan bulat {untuk penampung sementara}
L : Array [1 ..N]
N : bilangan bulat {jumlah elemen array}
K : Bilangan bulat {menampung indek nilai terkecil}
X : Bilangan bulat {menampung nilai terkecil}
Deskripsi :
For I 1 to (N-1) do
KI
X L[I]
For J ( I+1) to N do
If L[J] < X then
KJ
X L [J]
Endif
Endfor
Temp L[I]
L[I] X
L[K] temp
Endfor
Insertion sort / Sinking Sort / Sifting Sort
Data 25 27 10 8 76 21
Langkah/ 1 2 3 4 5 6
Lokasi
1 25
2 25 27
3 10 25 27
4 8 10 25 27
5 8 10 25 27 76
6 8 10 21 25 27 76
Deklarasi
I : Bilangan bulat {untuk langkah}
J : Bilangan bulat {untuk penelusuran array}
ketemu : boolean {untuk menyatakan posisi penyisipan ditemukan}
x : Bilangan bulat {tempat sementara agar L[K] tidak ditimpa
selama pergeseran }
Deskripsi
For I 2 to N do
X L[I]
JI–1
Ketemu False
While (J 1) and (not ketemu) do
If X < L[J] then
L[J+1] L[J]
J J-1
Else ketemu true
Endif
Endwhile
L[J+1] X
Endfor
Shell sort
• Pada prinsipnya sama dengan bubble sort yaitu
membandingkan elemen array dan melakukan
proses penukaran; bedanya kalau bubble sort
elemen yang dibandingkan adalah elemen yang
bersebelahan sedangkan pada shell sort elemen
yang dibandingkan mempunyai jarak tertentu
• Langkah pembandingan pertama berjarak N div
2, langkah kedua berjarak : jarak langkah
perbandingan pertama div 2 demikian seterusnya
sampai jarak perbandingan sama dengan satu.
Bila jarak sama dengan satu maka prosesnya
sama dengan Bubble sort
Urutkan secara ascending
Lokasi 1 2 3 4 5 6
Data 25 27 10 8 76 21
Loncat = 6 div 2 = 3
Lokasi 1 2 3 4 5 6
Data 25* 27 10 8* 76 21
8 27* 10 25 76* 21
8 27 10* 25 76 21*
Loncat = 3 div 2 = 1
Lokasi 1 2 3 4 5 6
8* 27* 10 25 76 21
1 8 27* 10* 25 76 21
2 8 10 27* 25* 76 21
3 8 10 25 27* 76* 21
4 8 10 25 27 76* 21*
5 8 10 25 27 21 76
8* 10* 25 27 21 76
1 8 10* 25* 27 21 76
2 8 10 25* 27* 21 76
3 8 10 25 27* 21* 76
4 8 10 25 21 27* 76*
8* 10* 25 21 27 76
1 8 10* 25* 21 27 76
2 8 10 25* 21* 27 76
3 8 10 21 25 27 76
8* 10* 21 25 27 76
1 8 10* 21* 25 27 76
2 8 10 21 25 27 76
8* 10* 21 25 27 76
1 8 10 21 25 27 76
Algoritma :
Procedure swap(P,Q : bilangan pecahan)
Deklarasi
Temp : bilangan pecahan
Deskripsi
Temp P
PQ
Q temp
Return
Algoritma utama:
Deklarasi
Loncat : bilangan bulat
N : Bilangan Bulat
Kondisi : Boolean
J : bilangan bulat
I : bilangan bulat
L : array [1 .. N]
Deskripsi
Loncat N
While loncat > 1 do
Loncat loncat div 2
Repeat
Kondisi true
For J 1 to (N- loncat) do
I J + Loncat
If L [J] > L [I] then
Swap (L[J], L[I])
Kondisi false
Endif
Endfor
Until kondisi
Endwhile
Quick sort
• Langkah :
a. Elemen 1 pindahkan pada penampung yang berfungsi sebagai
patokan
b. Dari kanan ke kiri secara berurutan cari nilai yang lebih kecil
dari patokan dan pindahkan nilainya pada posisi patokan
c. Dari kiri ke kanan secara berurutan cari nilai yang lebih besar
dari patokan dan pindahkan pada posisi data terakhir yang
dipindah
d. Lakukan langkah b dan c sampai posisi patokan ditemukan,
yaitu
– Bila posisi yang ditinggalkan dan yang ditempati saling
bersebelahan
– Bila dari kanan ke kiri tidak ada lagi data yang lebih kecil dari
patokan
– Bila dari kiri ke kanan tidak ada lagi data yang lebih besar dari
patokan
Urutkan secara ascending
Lokasi 1 2 3 4 5 6
Data 25 27 10 8 76 21
Patokan = 25
Lokasi 1 2 3 4 5 6
Kn * 27 10 8 76 21
Kr 21 27 10 8 76 *
Kn 21 * 10 8 76 27
Kr 21 8 10 * 76 27
21 8 10 25 76 27
Patokan = 21
Lokasi 1 2 3 4 5 6
* 8 10 25 76 27
kn 10 8 *
kr 10 8 21
Patokan = 10
Lokasi 1 2 3 4 5 6
* 8 21 25 76 27
kn 8 10
Patokan = 76
Lokasi 1 2 3 4 5 6
8 10 21 25 * 27
kn 27 76
Hasil
Lokasi 1 2 3 4 5 6
hasil 8 10 21 25 27 76
Algoritma :
Procedure swap(P,Q : bilangan pecahan)
Deklarasi
Temp : bilangan pecahan
Deskripsi
Temp P
PQ
Q temp
Return
Procedure bagi ( I, J , M : bilangan bulat)
Deklarasi
Saklar : bilangan bulat
Deskripsi
Saklar -1
While I < J do
If A[I] > A[J] then
Swap( A[I} , A[J])
Saklar - saklar
Endif
If saklar -saklar then J J-1
Else I I +1
Endif
MI
Endwhile
Return
Procedure quicksort (L,R : bilangan bulat)
deklarasi
K, mid : bilangan bulat;
Deskripsi
Write (‘L = ‘, L:2, ‘, R = ‘, R:2, ‘ : ‘);
For K L to R do
Write (A[K] : 4)
If L >= R then
If A[L] > A[R] then
swap (A[L], A[R])
endif
else
bagi(L,R,Mid)
call Quicksort(L,Mid-1)
Call quicksort(Mid+1, R)
Endif
Endfor
Return
Algoritma utama
Deklarasi
A : Array [1..N]
I, N : bilangan bulat
Deskripsi
Write(‘Jumlah komponen = ‘)
Readln(N)
For I 1 to N do
Read(A[I])
endfor
Call Quicksort(1,N)
For I 1 to N do
write(A[I]:4)
endfor
Radix Sort
a. Susun bilangan secara vertikal
b. Lakukan penambahan 0 didepan bilangan yang digitnya
kurang (samakan digitnya)
c. lakukan pengurutan secara vertikal mulai dari digit pertama
dari kiri dan lakukan pengelompokan
d. Dalam tiap-tiap kelompok, lakukaan pengurutan secara
vertikal untuk digit ke dua dari kiri, Bila dalam
pengelompokan hanya terdiri dari satu data maka posisinya
tetap (tidak perlu diurutkan)
e. Lakukan langkah d sampai dengan digit terakhir. Hasil
pengurutan adalah hasil pengelompokan digit terakhir
Lokasi 1 2 3 4 5 6
Data 25 17 10 8 36 21
25 08 08
17 17 10
10 10 17
08 25 21
36 21 25
21 36 36
Binary Sort
a. Ubah bilangan desimal ke dalam biner
b. Susun secara vertikal
c. Lakukan penambahan 0 didepan bilangan yang digitnya
kurang (samakan digitnya)
d. lakukan pengurutan secara vertikal mulai dari digit
pertama dari kiri dan lakukan pengelompokan
e. Dalam tiap-tiap kelompok, lakukaan pengurutan secara
vertikal untuk digit ke dua dari kiri, Bila dalam
pengelompokan hanya terdiri dari satu data maka
posisinya tetap (tidak perlu diurutkan)
f. Lakukan langkah e sampai dengan digit terakhir. Hasil
pengurutan adalah hasil pengelompokan digit terakhir
Contoh : Urutkan secara ascending
data : 8,5,4,2,10,7
0 0 1 0
0 1 1 1
0 1 0 1
0 1 0 0
1 0 0 0
1 0 1 0
Tanpa mengubah urutan digit 1 dan 2 dari kiri, lakukan
pengurutan digit 3 dari kiri
0 0 1 0
0 1 0 1
0 1 0 0
0 1 1 1
1 0 0 0
1 0 1 0
Tanpa mengubah urutan digit 1,2 dan 3 dari kiri, lakukan
pengurutan digit 4 dari kiri
0 0 1 0 = 2
0 1 0 0 = 4
0 1 0 1 = 5
0 1 1 1 = 7
1 0 0 0 = 8
1 0 1 0 = 10
6 10
4 7
2 5
Hasil : 2, 4, 5, 7, 8, 10
Anak kiri yang paling kiri – root – anak kanan yang paling kiri –
root – anak kanan – root - dst