Insertion Sort: Memahami Algoritma Penyortiran Sederhana dengan Studi Kasus dan Contoh Penggunaan
Insertion Sort, atau penyortiran sisip, merupakan salah satu algoritma penyortiran yang paling sederhana dan intuitif. Berbeda dengan algoritma lain yang mungkin terlihat lebih rumit dan efisien untuk data berukuran besar, Insertion Sort unggul dalam kesederhanaan implementasi dan efisiensinya pada data yang berukuran kecil atau hampir terurut. Inti dari Insertion Sort adalah membangun urutan terurut secara bertahap dengan menyisipkan setiap elemen data ke posisi yang tepat di dalam sub-array yang sudah terurut. Proses ini mirip dengan cara kita menyortir kartu remi di tangan. Kita mengambil satu kartu dan memindahkannya ke posisi yang sesuai di antara kartu-kartu yang sudah terurut.
Cara Kerja Insertion Sort: Langkah Demi Langkah
Insertion Sort bekerja dengan membagi array menjadi dua bagian: bagian yang sudah terurut dan bagian yang belum terurut. Awalnya, bagian yang sudah terurut hanya berisi elemen pertama dari array. Kemudian, untuk setiap elemen di bagian yang belum terurut, algoritma akan melakukan hal berikut:
- Ambil elemen: Ambil elemen pertama dari bagian yang belum terurut (sebut saja
key). - Bandingkan dan geser: Bandingkan
keydengan elemen-elemen di bagian yang sudah terurut, mulai dari elemen terakhir (paling kanan). Jikakeylebih kecil dari elemen yang dibandingkan, geser elemen tersebut ke kanan untuk memberi ruang bagikey. Proses ini terus diulangi sampaikeylebih besar atau sama dengan elemen yang dibandingkan, atau sampai kita mencapai awal dari bagian yang sudah terurut. - Sisipkan: Sisipkan
keyke posisi yang kosong yang telah dibuat di langkah sebelumnya.
Proses ini diulangi sampai semua elemen di bagian yang belum terurut telah dipindahkan ke bagian yang sudah terurut.
Contoh Sederhana: Menyortir Angka
Misalkan kita memiliki array angka berikut: [5, 2, 4, 6, 1, 3]
Berikut adalah langkah-langkah Insertion Sort untuk mengurutkan array ini:
- Iterasi 1:
[5, 2, 4, 6, 1, 3](Bagian terurut:[5], Bagian belum terurut:[2, 4, 6, 1, 3])key = 2- Bandingkan
2dengan5. Karena2 < 5, geser5ke kanan. - Sisipkan
2ke posisi yang kosong:[2, 5, 4, 6, 1, 3]
- Iterasi 2:
[2, 5, 4, 6, 1, 3](Bagian terurut:[2, 5], Bagian belum terurut:[4, 6, 1, 3])key = 4- Bandingkan
4dengan5. Karena4 < 5, geser5ke kanan. - Bandingkan
4dengan2. Karena4 > 2, sisipkan4ke posisi yang kosong:[2, 4, 5, 6, 1, 3]
- Iterasi 3:
[2, 4, 5, 6, 1, 3](Bagian terurut:[2, 4, 5, 6], Bagian belum terurut:[1, 3])key = 6- Bandingkan
6dengan5. Karena6 > 5, tidak perlu menggeser. - Sisipkan
6ke posisinya (tetap di tempat):[2, 4, 5, 6, 1, 3]
- Iterasi 4:
[2, 4, 5, 6, 1, 3](Bagian terurut:[2, 4, 5, 6], Bagian belum terurut:[1, 3])key = 1- Bandingkan
1dengan6. Karena1 < 6, geser6ke kanan. - Bandingkan
1dengan5. Karena1 < 5, geser5ke kanan. - Bandingkan
1dengan4. Karena1 < 4, geser4ke kanan. - Bandingkan
1dengan2. Karena1 < 2, geser2ke kanan. - Sisipkan
1ke posisi yang kosong:[1, 2, 4, 5, 6, 3]
- Iterasi 5:
[1, 2, 4, 5, 6, 3](Bagian terurut:[1, 2, 4, 5, 6], Bagian belum terurut:[3])key = 3- Bandingkan
3dengan6. Karena3 < 6, geser6ke kanan. - Bandingkan
3dengan5. Karena3 < 5, geser5ke kanan. - Bandingkan
3dengan4. Karena3 < 4, geser4ke kanan. - Bandingkan
3dengan2. Karena3 > 2, sisipkan3ke posisi yang kosong:[1, 2, 3, 4, 5, 6]
Hasil akhirnya adalah array yang sudah terurut: [1, 2, 3, 4, 5, 6]
Studi Kasus: Penyortiran Data Sensor
Bayangkan sebuah sistem pemantauan lingkungan yang mengumpulkan data dari berbagai sensor, seperti suhu, kelembaban, dan tekanan udara. Data ini perlu disortir secara berkala untuk analisis dan pelaporan. Data sensor seringkali datang dalam aliran yang berkelanjutan (stream), dan Insertion Sort dapat menjadi pilihan yang baik untuk menyortir data ini secara online – yaitu, saat data tiba.
Mengapa Insertion Sort cocok untuk studi kasus ini?
- Efisiensi untuk Data Hampir Terurut: Data sensor cenderung memiliki perubahan yang bertahap. Dengan kata lain, data yang baru diterima seringkali dekat dengan nilai-nilai yang sudah ada. Insertion Sort sangat efisien dalam kasus ini, karena hanya memerlukan sedikit pergeseran untuk menyisipkan data baru ke posisi yang tepat.
- Implementasi Sederhana: Karena kesederhanaannya, Insertion Sort mudah diimplementasikan dan dipelihara. Ini penting dalam sistem yang memerlukan keandalan dan stabilitas.
- Memori Kecil: Insertion Sort merupakan algoritma in-place, yang berarti ia hanya memerlukan sedikit memori tambahan untuk beroperasi. Ini penting untuk sistem embedded atau sistem dengan sumber daya terbatas.
Contoh Penggunaan Kode (Python)
Berikut adalah contoh implementasi Insertion Sort dalam Python:
def insertion_sort(arr):
for i in range(1, len(arr)):
key = arr[i]
j = i - 1
while j >= 0 and key < arr[j]:
arr[j + 1] = arr[j]
j -= 1
arr[j + 1] = key
# Contoh penggunaan
data_sensor = [25.5, 24.8, 26.1, 25.9, 25.0]
insertion_sort(data_sensor)
print(data_sensor) # Output: [24.8, 25.0, 25.5, 25.9, 26.1]
Kode di atas menunjukkan bagaimana Insertion Sort dapat digunakan untuk mengurutkan data sensor suhu. Setiap kali data sensor baru tiba, ia dapat langsung disisipkan ke dalam array yang sudah terurut menggunakan fungsi insertion_sort.
Kelebihan dan Kekurangan Insertion Sort
Kelebihan:
- Sederhana untuk diimplementasikan.
- Efisien untuk data berukuran kecil atau hampir terurut.
- Algoritma in-place (tidak memerlukan memori tambahan yang signifikan).
- Stabil (mempertahankan urutan elemen dengan nilai yang sama).
- Dapat digunakan untuk penyortiran online.
Kekurangan:
- Kurang efisien untuk data berukuran besar dengan urutan yang acak.
- Kompleksitas waktu rata-rata dan terburuk adalah O(n^2), di mana n adalah jumlah elemen.
Kapan Sebaiknya Menggunakan Insertion Sort?
Insertion Sort paling cocok digunakan dalam situasi berikut:
- Data yang akan disortir berukuran kecil (misalnya, kurang dari 100 elemen).
- Data hampir terurut.
- Membutuhkan algoritma yang sederhana dan mudah diimplementasikan.
- Memiliki batasan memori.
- Melakukan penyortiran online.
Kesimpulan
Insertion Sort, meskipun sederhana, tetap relevan dalam berbagai skenario. Kemampuannya untuk menangani data kecil dan hampir terurut secara efisien menjadikannya pilihan yang baik untuk aplikasi tertentu, seperti penyortiran data sensor atau komponen internal dari algoritma penyortiran yang lebih kompleks seperti hybrid sort. Memahami prinsip kerja dan batasan Insertion Sort memungkinkan pengembang untuk memilih algoritma penyortiran yang paling sesuai dengan kebutuhan spesifik proyek mereka. Penting untuk mempertimbangkan ukuran data, tingkat keterurutannya, dan batasan sumber daya saat memilih algoritma penyortiran. Dengan pemilihan yang tepat, kita dapat mengoptimalkan kinerja dan efisiensi sistem kita.