šŸ” 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:

  1. Bandingkan elemen pertama dengan elemen kedua
  2. Jika elemen pertama lebih besar, tukar posisinya
  3. Lanjutkan ke pasangan berikutnya sampai akhir array
  4. Ulangi proses dari awal sampai tidak ada lagi pertukaran
java
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:

64
34
25
12
22
11
90

šŸ’” 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
java
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:

64
34
25
12
22
11
90
88
45
50

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:

  1. Cari elemen tengah array
  2. Jika elemen tengah = target, data ditemukan!
  3. Jika target lebih kecil, cari di bagian kiri
  4. Jika target lebih besar, cari di bagian kanan
  5. Ulangi sampai ketemu atau tidak ada lagi area pencarian
java
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:

5
12
17
23
38
45
67
89
99

šŸ’” 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!