Giới thiệu về thuật toán sắp xếp Shell sort | Học trực tuyến CNTT, học lập trình từ cơ bản đến nâng cao

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

Chia sẻ kiến thức 07/03/2022

Mặc dù shell sort không phải là phương pháp hiệu quả nhất, nhưng nó mang lại nhiều giá trị cho người mới bắt đầu.

Shell sort là một kỹ thuật sắp xếp, nó phân chia một danh sách nhất định thành các danh sách con và sau đó sắp xếp chúng bằng cách sử dụng insertion sort (sắp xếp chèn). Thuật toán sử dụng khoảng trống n để chọn các mục cách nhau n khoảng trống để tạo thành danh sách con.

Các danh sách con sau đó được sắp xếp bằng cách sử dụng insertion sort, rồi được kết hợp với nhau. Danh sách kết hợp không được sắp xếp hoàn toàn nhưng giúp thuật toán này có lợi thế là có các mục (items) gần vị trí cuối cùng của chúng hơn.

insertion sort một lần nữa được sử dụng để sắp xếp danh sách cuối cùng.

1. Tìm hiểu kỹ hơn về Shell sort

Mô tả ở trên có thể không có nhiều ý nghĩa, nhưng một ví dụ sẽ hữu ích. Giả sử bạn có danh sách: [39, 6, 2, 51, 30, 42, 7, 4, 16] và giá trị khoảng cách (gap value) là 3.

Danh sách phụ đầu tiên sẽ có các mục: 39, 51, 7

Danh sách phụ thứ hai: 6, 30, 4

Danh sách phụ thứ ba & cuối cùng: 2, 42, 16

Sau khi insertion sort, mỗi danh sách con sẽ được sắp xếp như sau:

Đầu tiên: 7, 39, 51

Thứ hai: 4, 6, 30

Thứ ba: 2, 16, 42

Danh sách con đã được sắp xếp hiện được kết hợp theo một cách nhất định. Mỗi mục (item) trong danh sách con được đưa vào chỉ mục (index) mà từ đó giá trị danh sách con chưa được sắp xếp ban đầu được tập hợp. 

Do đó, bạn sẽ kết thúc với trình tự bên dưới:

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

Lưu ý rằng danh sách vẫn chưa được sắp xếp nhưng các mục đã ở gần vị trí cuối cùng của chúng hơn. Sau khi thực hiện insertion sort trên tổ hợp danh sách này, danh sách cuối cùng cũng được sắp xếp:

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

>>> Đọc ngay: 4 con đường sự nghiệp cho các nhà phân tích dữ liệu (Data Analyst)

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

Độ phức tạp của shell sort nằm giữa O (n) và O (n2). Việc tính toán để đi đến kết luận này nằm ngoài phạm vi của bài viết này.

1.2 Triển khai Python:

def shellSort(my_list):
n = len(my_list)
interval = n // 2 # floor division
while interval > 0:
for val in range(interval, n):
temp = my_list[val]
x = val
while x >= interval and my_list[x - interval] > temp:
my_list[x] = my_list[x - interval]
x = x - interval

my_list[x] = temp
interval = interval // 2 

>>> Đọc ngay: Nghề phân tích dữ liệu data analysis tại Việt Nam

2. Chuyển sang Merge sort

Mỗi thuật toán sắp xếp có một cơ chế hoạt động riêng. Ví dụ, merge sort (sắp xếp hợp nhất) sử dụng chiến lược ‘chia để trị’ và có độ phức tạp là O (nlogn).

Merge sort, trong một số trường hợp, tốt hơn shell sort và chắc chắn đáng để xem xét. 

>>> Nếu bạn đang có nhu cầu học lập trình trực tuyến, tìm hiểu ngay tại đây:

>>>Xem thêm bài viết liên quan:

Phân tích dữ liệu kinh doanh là làm gì năm 2022

Data analyst là gì? Tất cả những gì cần biết về nghề phân tích dữ liệu Data analyst

Trang bị Kỹ năng phân tích dữ liệu cho người mới

Nhà phân tích dữ liệu làm gì: mô tả, trách nhiệm?

Nghề phân tích dữ liệu sử dụng công cụ nào? Kiến thức cho dân IT cần phải biết

Phân biệt vai trò dữ liệu: Kỹ sư, nhà phân tích và nhà khoa học

Cách trở thành chuyên viên phân tích dữ liệu

Vân Nguyễn

Dịch từ: https://www.makeuseof.com/intro-to-shell-sort/

ĐĂNG KÝ TƯ VẤN HỌC LẬP TRÌNH TẠI FUNiX

Bình luận (
0
)

Bài liên quan

  • Tầng 0, tòa nhà FPT, 17 Duy Tân, Q. Cầu Giấy, Hà Nội
  • info@funix.edu.vn
  • 0782313602 (Zalo, Viber)        
Chat Button
FUNiX V2 GenAI Chatbot ×

yêu cầu gọi lại