Insertion Sort: Thuật toán sắp xếp cơ bản và ứng dụng

Bởi Trịnh Thị Ngọc • 2026-07-22 07:10:00 • Chuyên mục: Lập trình

Giới thiệu về thuật toán Insertion Sort

Trong thế giới của khoa học dữ liệu và lập trình, việc sắp xếp dữ liệu theo một trật tự nhất định là một yêu cầu cơ bản nhưng vô cùng quan trọng. Insertion Sort là một trong những thuật toán sắp xếp đơn giản và hiệu quả, đặc biệt phù hợp với các tập dữ liệu nhỏ hoặc dữ liệu đã gần như được sắp xếp. Với cách tiếp cận trực quan, thuật toán này giúp người học dễ dàng hình dung quá trình sắp xếp.

Điểm cốt lõi của Insertion Sort: Thuật toán hoạt động bằng cách xây dựng dần một mảng đã sắp xếp bằng cách lấy từng phần tử từ mảng chưa sắp xếp và chèn nó vào đúng vị trí trong phần mảng đã sắp xếp.

Insertion Sort hoạt động như thế nào?

Insertion Sort hoạt động dựa trên nguyên lý mô phỏng cách con người sắp xếp các quân bài trên tay. Quá trình này có thể được mô tả qua các bước sau:

  1. Chia mảng thành hai phần: Một phần chứa các phần tử đã được sắp xếp và phần còn lại chứa các phần tử chưa sắp xếp. Ban đầu, phần tử đầu tiên của mảng được coi là phần đã sắp xếp.
  2. Lấy phần tử tiếp theo: Thuật toán lấy một phần tử từ phần chưa sắp xếp.
  3. Tìm vị trí chèn: Phần tử vừa lấy sẽ được so sánh với các phần tử trong phần đã sắp xếp, di chuyển lùi về phía sau cho đến khi tìm được vị trí mà phần tử đó có thể được chèn vào sao cho vẫn duy trì được thứ tự sắp xếp.
  4. Chèn phần tử: Phần tử được chèn vào vị trí đã tìm thấy.
  5. Lặp lại: Quá trình này lặp lại cho đến khi tất cả các phần tử từ mảng chưa sắp xếp được chèn vào phần đã sắp xếp, hoàn thành việc sắp xếp toàn bộ mảng.

Ví dụ minh họa với mảng [ 7, 12, 9, 11, 3 ]:

Quá trìnhInsertion Sort từng bước minh họa cho việc chèn phần tử vào đúng vị trí.

Code minh họa Insertion Sort bằng C++

Dưới đây là đoạn mã C++ cài đặt thuật toán Insertion Sort:

#include <iostream> using namespace std; /* Function to sort array using insertion sort */ void insertionSort(int arr[], int n) { for (int i = 1; i < n; ++i) { int key = arr[i]; int j = i - 1; /* Move elements of arr[0..i-1], that are greater than key, to one position ahead of their current position */ while (j >= 0 && arr[j] > key) { arr[j + 1] = arr[j]; j = j - 1; } arr[j + 1] = key; } } /* A utility function to print array of size n */ void printArray(int arr[], int n) { for (int i = 0; i < n; ++i) cout << arr[i] << " "; cout << endl; } // Driver method int main() { int arr[] = {12, 11, 13, 5, 6}; int n = sizeof(arr) / sizeof(arr[0]); insertionSort(arr, n); printArray(arr, n); return 0; } 

Ưu và nhược điểm của Insertion Sort

Mỗi thuật toán đều có những điểm mạnh và hạn chế riêng. Insertion Sort cũng không ngoại lệ:

Ưu điểm

Biểu đồ minh họa sự khác biệt về hiệu suất giữa Insertion Sort và các thuật toán khác theo độ phức tạp của dữ liệu.

Nhược điểm

So sánh Insertion Sort với các thuật toán sắp xếp khác

Khi lựa chọn thuật toán sắp xếp, việc hiểu rõ điểm mạnh của từng loại là rất quan trọng. Insertion Sort thường được so sánh với các thuật toán phổ biến khác như Bubble Sort, Selection Sort, Merge Sort, và Quick Sort.

Thuật toán Độ phức tạp Thời gian (Trung bình) Độ phức tạp Không gian Tính ổn định
Insertion Sort O(n^2) O(1)
Bubble Sort O(n^2) O(1)
Selection Sort O(n^2) O(1) Không
Merge Sort O(n log n) O(n)
Quick Sort O(n log n) O(log n) Không

Ứng dụng của Insertion Sort

Mặc dù có độ phức tạp thời gian không lý tưởng cho dữ liệu lớn, Insertion Sort vẫn có những ứng dụng quan trọng:

Việc hiểu rõ insertion sort là gì và cách nó hoạt động giúp các lập trình viên đưa ra lựa chọn thuật toán phù hợp với từng bài toán cụ thể, tối ưu hóa hiệu suất chương trình.

Hình ảnh minh họa trực quan cho thấy cách Insertion Sort thực hiện việc chèn phần tử vào mảng.

Lời kết

Insertion Sort, dù không phải là lựa chọn tối ưu cho việc xử lý các tập dữ liệu khổng lồ, nhưng vẫn giữ vững vị trí của mình như một công cụ học thuật giá trị và một thành phần hữu ích trong các thuật toán sắp xếp phức tạp hơn. Khả năng hoạt động hiệu quả trên dữ liệu nhỏ hoặc gần sắp xếp, cùng với sự đơn giản trong cài đặt, làm cho nó trở thành một phần không thể thiếu trong bộ công cụ của mọi lập trình viên. Việc nắm vững insertion sort visualizationnguyên lý hoạt động của nó sẽ giúp bạn giải quyết các vấn đề sắp xếp một cách hiệu quả hơn.

#Lập trình #thuật toán #cấu trúc dữ liệu #Sắp xếp