Panduan Praktis: Contoh Algoritma C++ untuk Pemula

Struktur Logika Pemrograman

Visualisasi alur logika pemrograman.

Memahami algoritma adalah fondasi utama dalam dunia pemrograman, khususnya saat menggunakan bahasa tingkat menengah seperti C++. Algoritma adalah serangkaian langkah logis dan terstruktur untuk menyelesaikan suatu masalah. C++ menawarkan kecepatan dan kontrol memori yang sangat baik, menjadikannya pilihan ideal untuk mengimplementasikan algoritma yang efisien. Artikel ini akan menyajikan beberapa contoh algoritma C++ klasik yang penting untuk dikuasai oleh setiap pengembang.

1. Algoritma Pencarian Linier (Linear Search)

Algoritma ini adalah cara paling dasar untuk menemukan elemen dalam daftar (array) dengan memeriksa setiap elemen satu per satu secara berurutan.

Meskipun sederhana, linear search sangat penting sebagai titik awal. Kompleksitas waktunya adalah O(n), yang berarti semakin besar datanya, semakin lama waktu yang dibutuhkan.


#include <iostream>
#include <vector>

int linearSearch(const std::vector<int>& arr, int target) {
    for (int i = 0; i < arr.size(); ++i) {
        if (arr[i] == target) {
            return i; // Mengembalikan indeks jika ditemukan
        }
    }
    return -1; // Mengembalikan -1 jika tidak ditemukan
}

int main() {
    std::vector<int> data = {10, 50, 30, 70, 80, 20};
    int kunci = 30;
    int hasil = linearSearch(data, kunci);

    if (hasil != -1) {
        std::cout << "Elemen ditemukan pada indeks: " << hasil << std::endl;
    } else {
        std::cout << "Elemen tidak ditemukan." << std::endl;
    }
    return 0;
}
        

2. Algoritma Pengurutan Gelembung (Bubble Sort)

Bubble Sort bekerja dengan berulang kali menukar elemen yang berdekatan jika urutannya salah. Proses ini 'menggelembungkan' elemen terbesar ke posisi akhirnya secara bertahap.

Ini sering digunakan dalam pengajaran karena sangat mudah divisualisasikan. Namun, Bubble Sort memiliki kinerja yang buruk pada set data besar (O(n²)). Meskipun demikian, implementasi dasarnya dalam C++ memberikan pemahaman yang baik tentang pengurutan berbasis perbandingan.


#include <iostream>
#include <algorithm> // Untuk std::swap

void bubbleSort(int arr[], int n) {
    for (int i = 0; i < n - 1; ++i) {
        // Iterasi terakhir i elemen sudah berada di tempatnya
        for (int j = 0; j < n - i - 1; ++j) {
            if (arr[j] > arr[j + 1]) {
                std::swap(arr[j], arr[j + 1]);
            }
        }
    }
}

void printArray(int arr[], int size) {
    for (int i = 0; i < size; ++i) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;
}

int main() {
    int arr[] = {64, 34, 25, 12, 22, 11, 90};
    int n = sizeof(arr) / sizeof(arr[0]);
    
    bubbleSort(arr, n);
    
    std::cout << "Array terurut: ";
    printArray(arr, n);
    return 0;
}
        

3. Algoritma Rekursif: Menghitung Faktorial

Rekursi adalah teknik di mana suatu fungsi memanggil dirinya sendiri untuk menyelesaikan masalah yang lebih kecil hingga mencapai kasus dasar (base case). Faktorial adalah contoh klasik untuk ini.

Faktorial dari sebuah bilangan $n$ (ditulis $n!$) adalah hasil perkalian semua bilangan bulat positif kurang dari atau sama dengan $n$. Dalam C++, implementasi rekursif sangat elegan, tetapi perlu diingat bahwa rekursi yang terlalu dalam dapat menyebabkan luapan stack (stack overflow). Kasus dasar di sini adalah ketika $n=0$ atau $n=1$, di mana hasilnya adalah 1.


#include <iostream>

long long factorial(int n) {
    // Base Case
    if (n == 0 || n == 1) {
        return 1;
    }
    // Recursive Step
    return n * factorial(n - 1);
}

int main() {
    int angka = 5;
    long long hasil = factorial(angka);
    
    std::cout << "Faktorial dari " << angka << " adalah: " << hasil << std::endl; // Output: 120
    return 0;
}
        

Pentingnya Implementasi Algoritma dalam C++

C++ memungkinkan kita untuk mengontrol bagaimana memori dialokasikan dan bagaimana operasi dilakukan, yang krusial untuk optimasi algoritma. Ketika berhadapan dengan komputasi intensif, seperti dalam machine learning atau game development, pemahaman mendalam tentang kompleksitas waktu dan ruang (Big O notation) dari algoritma yang Anda pilih menjadi sangat penting. Menggunakan contoh algoritma C++ di atas sebagai dasar, pengembang dapat melangkah ke algoritma yang lebih kompleks seperti Quick Sort, Merge Sort, atau algoritma graf seperti Dijkstra.

Setiap baris kode yang Anda tulis adalah representasi dari sebuah algoritma. Menguasai sintaks C++ hanyalah separuh perjuangan; separuh lainnya adalah kemampuan merancang langkah-langkah logis yang benar dan efisien. Latihan dengan contoh-contoh dasar ini akan memperkuat intuisi pemrograman Anda secara signifikan.