š Sorting & Searching di Java
š SORTING (Pengurutan)
š”Apa itu Sorting?
Sorting adalah proses mengurutkan data dari yang terkecil ke terbesar (ascending) atau sebaliknya (descending). Sorting sangat penting dalam pemrograman untuk mempermudah pencarian dan pengolahan data.
Kenapa Penting? Data yang terurut lebih mudah dicari, dianalisis, dan ditampilkan. Misalnya: daftar nilai siswa, ranking, harga produk dari termurah ke termahal.
š«§Bubble Sort
Bubble Sort adalah algoritma sorting paling sederhana. Cara kerjanya dengan membandingkan dua elemen bersebelahan dan menukarnya jika urutannya salah. Proses ini diulang sampai semua data terurut.
Cara Kerja:
- Bandingkan elemen pertama dengan elemen kedua
- Jika elemen pertama lebih besar, tukar posisinya
- Lanjutkan ke pasangan berikutnya sampai akhir array
- Ulangi proses dari awal sampai tidak ada lagi pertukaran
public class BubbleSort {
public static void bubbleSort(int[] arr) {
int n = arr.length;
// Loop untuk setiap pass
for (int i = 0; i < n - 1; i++) {
// Loop untuk membandingkan elemen bersebelahan
for (int j = 0; j < n - i - 1; j++) {
// Jika elemen kiri > elemen kanan, tukar
if (arr[j] > arr[j + 1]) {
// Swap menggunakan variabel temporary
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
public static void main(String[] args) {
int[] data = {64, 34, 25, 12, 22, 11, 90};
System.out.println("Array sebelum sorting:");
for (int num : data) {
System.out.print(num + " ");
}
bubbleSort(data);
System.out.println("\nArray setelah sorting:");
for (int num : data) {
System.out.print(num + " ");
}
}
}
/* Output:
Array sebelum sorting:
64 34 25 12 22 11 90
Array setelah sorting:
11 12 22 25 34 64 90
*/š Kompleksitas:
- ⢠Time Complexity: O(n²) - kuadratik
- ⢠Space Complexity: O(1) - konstan
- ⢠Best Case: O(n) jika data sudah terurut
- ⢠Worst Case: O(n²) jika data terbalik
ā”š® Demo Interaktif: Bubble Sort
Visualisasi Bubble Sort
Lihat proses pengurutan step-by-step dengan animasi
š«§ Array Data:
š” Petunjuk:
- ⢠Kuning: Sedang dibandingkan
- ⢠Hijau: Sudah terurut di posisi akhir
- ⢠Putih: Belum terurut
š SEARCHING (Pencarian)
š”Apa itu Searching?
Searching adalah proses mencari data tertentu dalam kumpulan data. Ada berbagai algoritma searching dengan kecepatan berbeda. Pilihan algoritma tergantung apakah data sudah terurut atau belum.
ā”ļø1. Sequential Search (Linear Search)
Sequential Search atau pencarian berurutan adalah algoritma paling sederhana. Mencari data dengan memeriksa satu per satu dari awal sampai akhir atau sampai data ditemukan.
Karakteristik:
- ā Simpel dan mudah dipahami
- ā Bisa digunakan untuk data tidak terurut
- ā Lambat untuk data banyak
- ā Harus cek semua elemen jika data tidak ada
public class SequentialSearch {
public static int search(int[] arr, int target) {
// Loop dari index 0 sampai akhir array
for (int i = 0; i < arr.length; i++) {
// Jika ketemu, return indexnya
if (arr[i] == target) {
return i;
}
}
// Jika tidak ketemu, return -1
return -1;
}
public static void main(String[] args) {
int[] data = {64, 34, 25, 12, 22, 11, 90, 88};
int cari = 22;
int hasil = search(data, cari);
if (hasil != -1) {
System.out.println("Data " + cari + " ditemukan di index " + hasil);
} else {
System.out.println("Data " + cari + " tidak ditemukan");
}
}
}
/* Output:
Data 22 ditemukan di index 4
*/š Kompleksitas:
- ⢠Time Complexity: O(n) - linear
- ⢠Best Case: O(1) - data di index pertama
- ⢠Worst Case: O(n) - data di akhir atau tidak ada
- ⢠Space Complexity: O(1)
ā”š® Demo: Sequential Search
Visualisasi Sequential Search
Lihat proses pencarian linear step-by-step
š Array Data:
Tekan tombol untuk memulai pencarian
ā”2. Binary Search
Binary Search adalah algoritma pencarian yang jauh lebih cepat, tapi hanya bisa digunakan untuk data yang sudah terurut. Cara kerjanya dengan membagi array menjadi dua bagian secara berulang.
Cara Kerja:
- Cari elemen tengah array
- Jika elemen tengah = target, data ditemukan!
- Jika target lebih kecil, cari di bagian kiri
- Jika target lebih besar, cari di bagian kanan
- Ulangi sampai ketemu atau tidak ada lagi area pencarian
public class BinarySearch {
public static int search(int[] arr, int target) {
int low = 0;
int high = arr.length - 1;
while (low <= high) {
// Cari index tengah
int mid = (low + high) / 2;
// Jika ketemu di tengah
if (arr[mid] == target) {
return mid;
}
// Jika target lebih kecil, cari di kiri
if (arr[mid] > target) {
high = mid - 1;
}
// Jika target lebih besar, cari di kanan
else {
low = mid + 1;
}
}
// Tidak ditemukan
return -1;
}
public static void main(String[] args) {
// Array HARUS SUDAH TERURUT!
int[] data = {5, 12, 17, 23, 38, 45, 67, 89, 99};
int cari = 45;
int hasil = search(data, cari);
if (hasil != -1) {
System.out.println("Data " + cari + " ditemukan di index " + hasil);
} else {
System.out.println("Data " + cari + " tidak ditemukan");
}
}
}
/* Output:
Data 45 ditemukan di index 5
*/š Kompleksitas:
- ⢠Time Complexity: O(log n) - logaritmik (sangat cepat!)
- ⢠Best Case: O(1) - data di tengah
- ⢠Worst Case: O(log n)
- ⢠Space Complexity: O(1)
- ⢠ā ļø Syarat: Data HARUS sudah terurut!
ā”š® Demo: Binary Search
Visualisasi Binary Search
Lihat bagaimana binary search membagi area pencarian
š Sorted Array:
š” Petunjuk:
- ⢠Kuning: Mid (elemen tengah yang dicek)
- ⢠Orange: Low dan High (batas area pencarian)
- ⢠Terang: Area yang masih dicari
- ⢠Redup: Area yang diabaikan
āļøPerbandingan Sequential vs Binary
ā”ļø Sequential Search
- ā Bisa untuk data tidak terurut
- ā Mudah dipahami dan implement
- ā Cocok untuk data sedikit
- ā Lambat untuk data banyak (O(n))
- ā Harus cek semua jika tidak ada
ā” Binary Search
- ā Sangat cepat (O(log n))
- ā Efisien untuk data banyak
- ā Langsung tahu jika tidak ada
- ā Harus sort dulu (O(n log n))
- ā Hanya untuk data terurut
š” Kapan Pakai Apa?
- ⢠Sequential: Data tidak terurut, data sedikit, cari sekali
- ⢠Binary: Data terurut, data banyak, cari berkali-kali
š Ringkasan
š SORTING:
- ā Bubble Sort: Tukar elemen bersebelahan
- ā Kompleksitas: O(n²)
- ā Mudah tapi lambat untuk data banyak
š SEARCHING:
- ā Sequential: Cek satu-satu O(n)
- ā Binary: Bagi dua O(log n)
- ā Binary butuh data terurut!