Menu
CoddyTech

Insertion Sort

Terakhir diperbarui

Insertion sort adalah algoritma pengurutan yang membangun array terurut satu elemen demi satu elemen. Algoritma ini mengambil elemen berikutnya yang belum terurut (disebut "kunci"), menggeser setiap elemen yang lebih besar di bagian terurut satu slot ke kanan, lalu menaruh kunci itu di celah yang terbuka. Caranya persis seperti kebanyakan orang mengurutkan kartu remi di tangan. Tekan Putar di atas untuk melihat setiap kunci disisipkan, atau jalankan pergeserannya satu per satu.

Insertion sort sangat cepat pada input yang kecil atau hampir terurut: algoritma ini berjalan dalam O(n) jika datanya sudah terurut. Itulah sebabnya banyak algoritma pengurutan hibrida beralih ke insertion sort untuk subarray yang kecil.

Kompleksitas waktu dan ruang

KasusKompleksitasCatatan
Kasus terbaikO(n)Sudah terurut
Kasus rata-rataO(n²)Urutan acak
Kasus terburukO(n²)Terurut terbalik
RuangO(1)In-place
StabilYaElemen yang sama mempertahankan urutan relatifnya

Langkah demi langkah

LangkahApa yang terjadi
1Anggap elemen pertama sebagai bagian terurut berukuran satu.
2Ambil elemen berikutnya sebagai kunci.
3Geser setiap elemen terurut yang lebih besar daripada kunci satu slot ke kanan.
4Sisipkan kunci ke celah yang terbuka.
5Ulangi sampai setiap elemen sudah disisipkan.

Contoh penerapan

Mengurutkan [5, 2, 4, 1]:

PutaranArrayAksi
Mulai[5, 2, 4, 1]5 adalah bagian terurut awal berukuran satu.
1[2, 5, 4, 1]Kunci 2: geser 5 ke kanan, sisipkan 2 di depan.
2[2, 4, 5, 1]Kunci 4: geser 5 ke kanan, 2 lebih kecil jadi berhenti, sisipkan 4.
3[1, 2, 4, 5]Kunci 1: geser 5, 4, 2 ke kanan, sisipkan 1 di depan.
Selesai[1, 2, 4, 5]Setiap elemen sudah disisipkan; array sudah terurut.

Kapan memakai insertion sort

Pakai saatHindari saat
Array-nya kecil (kira-kira n < 20).Array-nya besar dan urutannya acak.
Datanya sudah hampir terurut, sehingga memberi kasus terbaik O(n).Kamu butuh kasus terburuk O(n log n) yang terjamin.
Kamu butuh pengurutan stabil dan in-place dengan ruang tambahan O(1).Elemen mahal untuk dipindahkan, karena algoritma ini melakukan banyak pergeseran.
Data datang sedikit demi sedikit dan harus tetap terurut secara online.Inputnya terurut terbalik, yang merupakan kasus terburuk O(n²).

Kode Insertion Sort

Implementasi Insertion Sort yang rapi dan siap dijalankan dalam Python, JavaScript, Java, C++, C, Pseudocode. Pilih bahasa, salin kodenya, atau buka langsung di Coddy Playground.

Kode Insertion Sort dalam Python

Python
1def insertion_sort(a):2    for i in range(1, len(a)):3        key = a[i]4        j = i - 15        # Shift larger elements one slot to the right6        while j >= 0 and a[j] > key:7            a[j + 1] = a[j]8            j -= 19        a[j + 1] = key10    return a11
12
13nums = [7, 3, 9, 1, 5, 8, 2]14print("Before:", nums)15insertion_sort(nums)16print("After: ", nums)
Jalankan kode ini di Playground Python

FAQ Insertion Sort

Berapa kompleksitas waktu insertion sort?
Insertion sort bernilai O(n²) pada kasus rata-rata dan terburuk, tetapi O(n) pada array yang sudah terurut atau hampir terurut. Ruang tambahan yang dipakai O(1).
Apakah insertion sort stabil?

Ya. Insertion sort hanya menggeser elemen yang benar-benar lebih besar daripada kunci, jadi elemen yang sama tidak pernah saling melewati dan urutan relatifnya tetap terjaga.

Kapan sebaiknya memakai insertion sort?

Pakai insertion sort untuk array kecil atau data yang sudah hampir terurut. Karena bebannya rendah dan kasus terbaiknya adaptif, algoritma hibrida seperti Timsort memakainya untuk run yang kecil.

Apa perbedaan insertion sort dan bubble sort?
Keduanya adalah pengurutan berbasis perbandingan O(n²), tetapi insertion sort menggeser elemen untuk membuka celah bagi kunci, sedangkan bubble sort berulang kali menukar pasangan bersebelahan yang urutannya salah. Insertion sort biasanya melakukan lebih sedikit penulisan dan berkinerja lebih baik dalam praktik, terutama pada data yang hampir terurut, tempat algoritma ini mencapai kasus terbaik O(n).
Mengapa insertion sort lebih cepat daripada merge sort pada array kecil?
Insertion sort punya beban faktor konstanta yang sangat rendah dan tidak memakai rekursi atau alokasi tambahan, jadi pada input kecil algoritma ini mengalahkan pengurutan O(n log n) meskipun kompleksitas asimtotiknya lebih buruk. Itulah persis alasan algoritma hibrida seperti Timsort dan introsort beralih ke insertion sort untuk subarray yang kecil.
Apakah insertion sort lebih cocok untuk linked list atau array?
Insertion sort biasanya ditulis untuk array, di mana menggeser elemen adalah biaya utamanya. Pada linked list, kamu bisa menghindari pergeseran dengan menyambungkan node langsung ke tempatnya, tetapi kamu kehilangan akses acak yang cepat, jadi mencari titik penyisipan tetap butuh waktu linear per elemen dan biaya totalnya tetap O(n²).
Ilustrasi bahasa pemrograman di Coddy

Kuasai algoritma bersama Coddy

Mulai