Pengurutan Sederhana · Pelajaran 6 dari 10

Insertion sort

8 menit baca · BelajarCode

Saat bermain kartu, kamu biasanya mengambil kartu satu per satu dan menyisipkannya ke posisi yang tepat di antara kartu yang sudah dipegang. Itulah insertion sort.

Jejak insertion sort untuk 12, 11, 13, 5, 6
LangkahData yang disisipkanBagian kiri setelah disisipkan
Awal12
11111 12
21311 12 13
355 11 12 13
465 6 11 12 13
Python
1def insertion_sort(data):2    data = data.copy()3    for i in range(1, len(data)):4        kunci = data[i]5        j = i - 16        while j >= 0 and data[j] > kunci:7            data[j + 1] = data[j]8            j -= 19        data[j + 1] = kunci10    return data1112print(insertion_sort([12, 11, 13, 5, 6]))
Keluaran
[5, 6, 11, 12, 13]

Data yang lebih besar dari kunci digeser satu posisi ke kanan, sampai ditemukan tempat yang pas untuk kunci.

Analisis

  • Terburuk (data terbalik): O(n²).
  • Terbaik (data sudah urut): O(n), karena setiap data langsung berada di tempatnya.
  • Sangat cepat untuk data yang hampir urut, misalnya daftar yang sudah urut lalu ditambah beberapa data baru.
  • Stabil, karena data hanya digeser melewati data yang lebih besar, tidak yang sama besar.

Karena kelebihan ini, banyak algoritma pengurutan modern memakai insertion sort untuk potongan data yang kecil.

Cek pemahaman

Untuk data mana insertion sort paling cepat?

Latihan

Hitung pergeseran

Tambahkan penghitung banyaknya pergeseran ke insertion_sort, lalu bandingkan data [1, 2, 3, 5, 4] (hampir urut) dengan [5, 4, 3, 2, 1] (terbalik).

Jalankan contoh kode di pelajaran ini tanpa instalasi lewat compiler Python online.

Tandai pelajaran ini selesai

Masuk ke aplikasi untuk mencatat kemajuan, lalu lanjutkan ke pelajaran berikutnya dari perangkat mana pun.

Buka di aplikasi