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.
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;
}
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;
}
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;
}
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.