Giới thiệu về thuật toán sắp xếp chèn

Giới thiệu về thuật toán sắp xếp chèn

Insertion Sort là một kỹ thuật hoạt động bằng cách sử dụng một danh sách con đã được sắp xếp và liên tục thêm một giá trị vào nó từ danh sách chưa được sắp xếp cho đến khi toàn bộ danh sách được sắp xếp.





Thuật toán bắt đầu với mục danh sách đầu tiên là danh sách con được sắp xếp. Sau đó, nó so sánh số tiếp theo với số đầu tiên. Nếu nó lớn hơn, thì nó được chèn vào chỉ mục đầu tiên. Nếu không, nó được để lại trong chỉ mục của nó.





Giá trị thứ ba sau đó được so sánh với hai giá trị còn lại, và sau đó được chèn vào chỉ mục chính xác. Quá trình này tiếp tục cho đến khi toàn bộ danh sách được sắp xếp.





Xem xét kỹ hơn về phân loại chèn

Mô tả ở trên có thể không có ý nghĩa đối với bạn. Một ví dụ sẽ giúp bạn hiểu rõ hơn nhiều.

Giả sử bạn có một danh sách: [39, 6, 2, 51, 30, 42, 7].



Thuật toán xác định 39 là giá trị đầu tiên của danh sách con được sắp xếp. Đánh giá sau đó chuyển sang vị trí thứ hai.

Liên quan: Lập trình động: Ví dụ, Sự cố thường gặp và Giải pháp





Sau đó 6 được so sánh với 39. Vì 6 nhỏ hơn 39 nên 6 được chèn vào vị trí đầu tiên và 39 ở vị trí thứ hai. Thứ tự danh sách mới sau lần vượt qua đầu tiên bây giờ là:

[6, 39, 2, 51, 30, 42, 7]





Đánh giá bây giờ chuyển sang vị trí thứ ba. 2 được so sánh với hai số cuối cùng và sau đó chèn vào đúng vị trí. Thứ tự danh sách mới sau lần vượt qua thứ hai bây giờ là:

[2, 6, 39, 51, 30, 42, 7]

Đối với lần vượt qua thứ ba, thứ tự danh sách là:

[2, 6, 39, 51, 30, 42, 7]

Quá trình lặp lại cho đến khi toàn bộ danh sách được sắp xếp.

Xem sơ đồ dưới đây tóm tắt các thao tác này:

Phân tích thuật toán

Độ phức tạp về thời gian của Sắp xếp chèn là O (n2), giống như phân loại bong bóng . Số phép so sánh trong trường hợp xấu nhất là tổng của tất cả các số nguyên từ 1 đến (n-1), cho ra tổng bậc hai.

Triển khai mã

Mã Python và Java bên dưới cho thấy cách bạn có thể triển khai phương pháp Phân loại chèn.

Python:

def insertionSort(mylist):
for step in range(1, len(mylist)):
current_element = mylist[step]
position = step
while position > 0 and mylist[position - 1] > current_element:
mylist[position] = mylist[position - 1]
position = position - 1
mylist[position] = current_element

Java:

void insertionSort(int[] myarray) {
int n = myarray.length;
for (int x = 1; x int key = myarray[x];
int y = x-1;
while ( (y > -1) && ( myarray [y] > key ) ) {
myarray [y+1] = myarray [y];
y--;
}
myarray[y+1] = key;
}
}

Mã hóa tốt hơn với mã giả

Các ví dụ mã ở trên được đưa ra mà không có bất kỳ mã giả nào mà bạn có thể tham khảo để viết thuật toán này bằng các ngôn ngữ khác. Hầu hết các lập trình viên (bao gồm cả tác giả) thích chạy đến bàn phím của họ sau khi được nghe những lời 'thì thầm' về cách thức hoạt động của một chương trình.

Cách tiếp cận này rất dễ xảy ra lỗi vì logic chương trình trở nên phức tạp hơn. Bạn muốn nâng cấp trò chơi lập trình của mình bằng cách học cách sử dụng mã giả như thế nào?

Đăng lại Đăng lại tiếng riu ríu E-mail Pseudocode là gì và nó làm cho bạn trở thành một nhà phát triển tốt hơn như thế nào?

Khó khăn để học lập trình? Nắm bắt được mã bằng cách học mã giả. Nhưng mã giả là gì và nó có thực sự giúp ích được không?

Đọc tiếp
Chủ đề liên quan
  • Lập trình
  • Java
  • Python
  • Hướng dẫn viết mã
Giới thiệu về tác giả Jerome Davidson(22 bài báo đã xuất bản)

Jerome là Nhân viên viết bài tại MakeUseOf. Anh ấy bao gồm các bài báo về Lập trình và Linux. Anh ấy cũng là một người đam mê tiền điện tử và luôn theo dõi ngành công nghiệp tiền điện tử.

nút home iphone 8 plus không hoạt động
Xem thêm từ Jerome Davidson

Theo dõi bản tin của chúng tôi

Tham gia bản tin của chúng tôi để biết các mẹo công nghệ, đánh giá, sách điện tử miễn phí và các ưu đãi độc quyền!

Bấm vào đây để đăng ký