Algoritma pengurutan insertion menyisipkan elemen ke posisi yang tepat dengan membandingkan elemen berurutan dan menukar posisinya jika perlu. Proses ini dilakukan dari indeks ke-2 hingga akhir untuk mengurutkan elemen dari yang terkecil hingga terbesar. Algoritma ini memiliki kompleksitas O(n2) pada kasus terburuk namun dapat mengurutkan dalam waktu linier jika data sudah hampir terurut.
2. Pendahuluan
Pengurutan Insertion adalah metode pengurutan elemen
pada penampung dengan cara menyisipkan elemen ke
posisi yang memenuhi syaratnya (kurang dari atau lebih
dari suatu elemen pada indeks tertentu).
Pemeriksaan dilakukan dari indeks ke-2 ke depan (posisi
indeks dirinya - 1) sampai indeks pertama.
3. Proses: Pengurutan Membesar
5
6 3 1 8 7 2 4
● Mulai dengan indeks ke-2: 5
● Perbandingan ke depan (dengan indeks dirinya-1): 6
4. Proses: Pengurutan Membesar
5
5 6 3 1 8 7 2 4
5 6 3 1 8 7 2 4
● Karena 5 < 6, sisipkan di 5 di depan 6 dan rapatkan
kembali.
● Indeks pertama dan kedua telah teratur, mulai kembali
dari indeks elemen yang dibandingkan +1 (2+1, berarti
indeks ke-3)
5. Proses: Pengurutan Membesar
5
3
6 1 8 7 2 4
● Indeks ke-3: 3 sebagai pembanding
● Perbandingan ke depan (dengan indeks dirinya-1): 6
6. Proses: Pengurutan Membesar
● 3 < 6, geser posisi 6
● Bandingkan kembali ke depan (dengan indeks dirinya-
2): 5
5
3
6 1 8 7 2 4
7. Proses: Pengurutan Membesar
3 5
6 4 8 7 2 1
3
● geser posisi 5
● Karena tidak ada yang dibandingkan kembali, sisipkan
3 di posisi terakhir perbandingan yang didapatkan
● …
● dst
3 5 6 4 8 7 2 1
8. Pseudocode
procedure insertionSort( Output/Input A : list of sortable items )
for i = 1 to length[A]-1 do
begin
value = A[i];
j = i-1;
done = false;
repeat
if A[j] > value
A[j+1] = A[j];
j = j-1;
if j < 0
done = true;
else
done = true;
until done;
A[j+1] = value;
end
9. Kode C++
#include <iostream>
using namespace std;
void insertionSort(int arr[], int length) {
int i, j ,tmp;
for (i = 1; i < length; i++) {
j = i;
while (j > 0 && arr[j - 1] > arr[j]) {
tmp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = tmp;
j--;
}
}
}
int main()
{
int numbers[] = { 8, 40, 1, 5, 0, 9, 6, 4, 3, -1, 5 };
insertionSort(numbers, 10);
for (int i = 0;i<10;i++) cout << numbers[i] << " | ";
}