Alvin Tjondrowiguno
3: Algoritma Dasar
Desain dan Analisis Algoritma
4 8
36
7 5
Algoritma
Penyortiran
• Keluaran: Array yang sama dengan masukan, namun dalam urutan tertentu (untuk mempermudah, akan
• Operasi dasar: Perbandingan diasumsikan “naik”)
• Input: Array dengan panjang n
Masalah Penyortiran
Tukar pasangan berdekatan yang letaknya salah sehingga
elemen yang benar "digelembungkan" ke akhir array 3 4 6 2 7 5 8
Tukar pasangan berdekatan yang letaknya salah sehingga
elemen yang benar "digelembungkan" ke akhir array 3 6 4 8 2 7 5 Tukar pasangan berdekatan yang letaknya salah sehingga
3 6 4 8 2 7 5
elemen yang benar "digelembungkan" ke akhir array 3 4 2 6 5 7 8
Sortir Gelembung
untuk j di (1 sampai n-1):
jika larik[j-1] > larik[j]:
untuk saya di (0 hingga n-1):
BubbleSort (array dengan panjang n):
menukar(array[j-1], array[j]) kembalikan susunan
Sortir Gelembung
kompleksitas waktu Apakah yang
dari Penyortiran Gelembung?
2 6 4 8 3 7 5
Pilih elemen yang tepat untuk menempati tempat ini
2 3 4 8 6 7 5 3 6 4 8 2 7 5
Pilih elemen yang tepat untuk menempati tempat ini Pilih elemen yang tepat untuk menempati tempat ini
3 6 4 8 2 7 5
Sortir Seleksi
jika larik[j] < larik[min_index]:
indeks_min = j menukar(array[i], array[min_index]) kembalikan susunan
indeks_min = saya
untuk j di (i+1 hingga n-1):
untuk saya di (0 hingga n-1):
SelectionSort (array dengan panjang n):
Sortir Seleksi
Urutan Seleksi?
Apakah yang
kompleksitas waktu
6 4 8 2 7 5 3
Masukkan elemen berikutnya ke tempat yang tepat
3 6
Tidak disortir
Masukkan elemen berikutnya ke tempat yang tepat
Diurutkan
3 6 4 8 2 7 5
4 8 2 7 5
Masukkan elemen berikutnya ke tempat yang tepat
3 4 6 8 2 7 5
Sortir Penyisipan
untuk j di (i-1 hingga 0):
jika larik[j] > larik[j+1]:
untuk saya di (1 sampai n-1):
InsertionSort (array dengan panjang n):
menukar(array[j], array[j+1]) kembalikan susunan
Sortir Penyisipan
kompleksitas waktu Apakah yang
Urutan Penyisipan?
3 6 8 4 2 7 5
5
2
2 7 8 4
7 5
3 4 6 8 3 6
4
2 5 7 2 7 5
3
3 6 8 4
6 8
2 7
Pengulangan Gabungkan Sortir
Kasus dasar
3 6 5
3 6 8 4 2 7 5
Gabungkan Sortir
4 8
Gabungkan Sortir
Gabungkan (a, b):
kembalikan susunan
hasil[k] = b[j]
jika n == 1:
MergeSort (array dengan panjang n):
j++
hasil kembali
saya++
kalau tidak:
hasil[k] = a[i]
MergeSort (Array kanan)
jika a[i] < b[j]:
larik = Gabung(
MergeSort(Array kiri),
untuk k dalam (0 hingga m-1):
i = 0, j = 0, hasil = []
rightArray = array[n/2+1 hingga n-1]
)
m = panjang(a) + panjang(b)
leftArray = array[0 hingga n/2]
kembalikan susunan
Gabungkan Sortir
Kompleksitas waktu Pengurutan Penggabungan
3 6 4 8 2 7 5
3 2 5 4 6 8 7 3 6 4 8 2 7 5
Sortir Cepat
Array "Partisi" sedemikian rupa sehingga:
• Elemen > pivot di sebelah kanan pivot
• Elemen < pivot ke kiri pivot
Pilih elemen pivot dari array
array, pivot = partisi(array, pivot) array = QuickSort(array, kiri, pivot - 1) array = QuickSort(array, pivot + 1, kanan) kembalikan susunan
kembalikan susunan poros = kiri
jika kiri >= kanan:
QuickSort (array, kiri, kanan):
Sortir Cepat
dari QuickSort akan menjadi
dibahas nanti!
kompleksitas waktu Algoritma partisi dan
! Algoritma
Mencari
• Untuk beberapa algoritma pencarian, array harus diurutkan
Jika tidak, keluaran -1
• Keluaran: Jika x ada dalam array, keluarkan indeks x
• Input: Array dengan panjang n dan angka x
• Operasi dasar: Perbandingan
Masalah Pencarian
jika larik[i] == x:
kembalikan saya
untuk saya di (0 hingga n - 1):
LinearSearch(array dengan panjang n, x):
kembali -1
Pencarian Linier
kompleksitas waktu Apakah yang
Pencarian Linier?
Jika sama, algoritma selesai
Jika x lebih tinggi, cari secara rekursif ke kanan Bandingkan x dengan elemen tengah
Input: Array yang diurutkan dan x
Pencarian Biner
2 3 4 5 6 7 8
6
2 3 4 5 6 7 8
66 7 8
6indeks_tengah = (kiri + kanan) / 2
kembalikan indeks_tengah jika x == larik[indeks_tengah]:
kembalikan BinarySearch(array, x, mid_index+1, kanan) jika kiri > kanan:
kembali -1
x, kiri, kanan):
BinarySearch(array yang diurutkan dengan panjang n,
lain jika x > array[mid_index]:
Pencarian Biner
akan di diskusikan Nanti!
Pencarian Biner
Kompleksitas waktu
Minggu depan: Notasi Asimptotik