Thuật toán sắp xếp chèn – insertion sort algorithm c/c++

Khám phá toàn thể về thuật toán sắp xếp chèn, insertion sort algorithm code ₵/₵++ minh họa. Sắp xếp chèn trực tiếp, là một thuật toán cực kì hay & hữu hiệu so với người học lập trình.

1. Sáng kiến thuật toán sắp xếp chèn

Thuật toán sắp xếp chèn (Insertion sort) được John Mauchly đặt ra rất sớm vào năm 1946 trong cuộc hội thảo trước hết về thuật toán sắp xếp thuộc máy tính. Đây là một thuật toán sắp xếp nhại lại cách sắp xếp quân bài của những người chơi bài. Mong muốn sắp một bộ bài theo trật tự người chơi bài rút lần lượt từ quân thứ 2, đối với các quân đứng trước nó để chèn vào địa điểm phù hợp.

Minh họa thuật toán sắp xếp chèn

Thuật toán sử dụng vòng lặp để duyệt từ đầu mục lục tới cuối mục lục & chèn phần tử vào đúng địa điểm để phát triền thành mục lục có thứ tự đúng.

  • Tại mỗi địa điểm ι của phần tử đang duyệt, lấy ra phần tử α[i] đó, tìm vị phù hợp trong đoạn đã xét α[0] đến α[i-1] sau đó chèn để đoạn mục lục α[0] đến α[i] trở thành mục lục có thứ tự đúng.
  • Ở lần duyệt thứ ι (ι bắt nguồn từ ι, bỏ qua phần tử trước hết),  ta có ι+1 phần tử ở đầu mục lục là một mục lục có thứ tự.

Việc sắp xếp thường được thực hiện giờ chỗ, bằng cách lặp lại mảng, tăng mục lục được sắp xếp đằng sau nó. Tại mỗi địa điểm mảng, nó kiểm soát giá trị ở đó đối với giá trị lớn nhất trong mục lục đã sắp xếp (tức là phần tử ở bên trái nó, mục lục trước nó đã được kiểm soát). Nếu to hơn, nó đứng tại chỗ & chuyển sang kiểm soát phần tử kế tiếp. Nếu bé hơn, nó sẽ tìm địa điểm đúng đắn trong mục lục đã sắp xếp, chuyển dịch toàn bộ các giá trị to hơn để tạo khoảng trắng & chèn vào địa điểm đúng đắn đó.

Thuật toán sắp xếp chèn còn tồn tại một biến thể này là chèn nhị phân ( Binary Insertion sort). Ở biến thể này, thuật toán sẽ sử dụng mẹo tìm kiếm nhị phân để tìm địa điểm chèn thích hợp cho phần tử đang duyệt. Sau đó mới tiến hành chèn.

2. Giải thuật Insertion sort

Thuật toán Insertion Sort:

Input: Mảng số nguyên α có ռ phần tử

Output: Mảng α sắp xếp có thứ tự

Bước 1: ι = 1;             // Bỏ qua phần tử trước hết

Bước 2: j = ι;

Bước 3: α[j] = Ҳ;

  • Trong lúc ( j> 0  & Ҳ < α[j-1]   // Tìm địa điểm phù hợp cho Ҳ
  • α[j]=α[j-1];
  •  j = j-1;
  • α[j] = Ҳ;

Bước 4: ι = ι +1          // Lần duyệt tiếp

  • Nếu ι > n-1   Dừng vòng lặp, chấm dứt thuật toán
  • Trái lại, quay trở về bước 2

Lưu đổ thuật toán:

lưu đồ thuật toán sắp xếp chènLưu đồ thuật toán sắp xếp chèn

Sắp xếp chèn còn tồn tại các biến thế là:

  • Chèn nhị phân (Binary Insertion Sort): Sử dụng tìm kiếm nhị phân để tìm thấy địa điểm chèn thích hợp sau đó chèn
    Shell sort: Thuật toán sắp xếp quan niệm giống sắp

3. Setup thuật toán Insertion sort

Thuật toán sắp xếp chèn – Insertion sort thiết lập bằng ₵/₵++

// Thuật toán sắp xếp chèn
void insertionSort(int α[], int ռ){
	int j, Ҳ;
	for(int ι=1;ι0 && Ҳ<α[j-1]){
			α[j]=α[j-1];
			j--;
		}
		α[j]=Ҳ;
	}
}

4. Nhận xét thuật toán Insertion sort

Bảng nhận xét thuật toán:

Trường hợpSố lần so sánhSố lần gánĐộ phức tạpTốt nhấtn-12(n-1)Σ(ռ)Xấu nhấtO( )

Bình quân, thuật toán sắp xếp chèn – Insertion sort có độ  cầu kỳ là Σ( ). Trường hợp tốt đặc biệt là với đầu vào đã được sắp xếp đúng thứ tự. Trường hợp xấu là dãy bị đảo ngược thứ tự hoàn toàn.

Ưu thế:

  • Đơn giản thiết lập, giải thuật dễ dàng dễ hiểu, thích hợp cho việc học hành & tìm hiểu
  • Thuật toán có tính ổn định
  • Hoạt động tốt nếu mảng cần sắp xếp nhỏ & đã được sắp xếp một phần
  • Tốn ít bộ nhớ lưu trữ

Điểm yếu:

  • Là thuật toán có độ cầu kỳ lớn Σ( ) chính vì như thế chẳng thể vận dụng với dữ liệu lớn
  • Năng suất của thuật toán thấp, không thực sự tối ưu.

Với một số điểm yếu kể trên, thuật toán này ít được vận dụng trong thực tiễn, ngoài ra nó lại cực kì hữu hiệu trong việc học hành & tìm tòi các nguyên lý, thuật toán trong lập trình. Chính vì như thế bạn hãy nỗ lực master nó nhé!


Insertion Sort Algorithm | Thuật toán sắp xếp chèn


Hế lô hế lô, Ông dev đây!
Trong phần này mình sẽ giới thiệu & giải thích phương thức hoạt động của Insertion Sort Algorithm một thuật toán sắp xếp khá là thông dụng.
Code:
https://github.com/OngDevTutorials/sortingalgorithmsvisualizer/blob/master/assets/js/algorithms/InsertionSort.js
Visualizer đã được publish trên github của mình:
https://ongdevtutorials.github.io/sortingalgorithmsvisualizer/
Để xem những video về lập trình & gaming
Bấm vào đây để theo dõi kênh mình nhé: https://duyngd.com/Subscribe
Blog của mình
https://duyngd.com
Fb page của mình
https://www.facebook.com/ongdevvuitinh
Ủng hộ Ông Dev
https://unghotoi.com/ongdev
Cảm ơn các bạn đã quan tâm theo dõi
ôngdev algorithm insertion

Tham khảo thêm nội dung thuộc chuyên đề: Thủ thuật máy tính
Xem thêm bài viết thuộc chuyên mục: Thủ thuật máy tính
XEM THÊM  Cách chơi cờ tướng cơ bản cho người mới cách chơi cờ tướng cơ bản – đơn giản

Related Articles

Stay Connected

FansLike
3,051FollowersFollow
SubscribersSubscribe

Latest Articles

XEM THÊM  Mã vùng điện thoại phú yên sẵn sàng chuyển đổi mã vùng điện thoại cố định