Shell Sort trong cấu trúc dữ liệu và giải thuật
Shell Sort là gì?
Shell Sort là một giải thuật sắp xếp mang lại hiệu quả cao dựa trên giải thuật sắp xếp chèn (Insertion Sort). Giải thuật này tránh các trường hợp phải tráo đổi vị trí của hai phần tử xa nhau trong giải thuật sắp xếp chọn (nếu như phần tử nhỏ hơn ở vị trí bên phải khá xa so với phần tử lớn hơn bên trái).
Đầu tiên, giải thuật này sử dụng giải thuật sắp xếp chọn trên các phần tử có khoảng cách xa nhau, sau đó sắp xếp các phần tử có khoảng cách hẹp hơn. Khoảng cách này còn được gọi là khoảng (interval) – là số vị trí từ phần tử này tới phần tử khác. Khoảng này được tính dựa vào công thức Knuth như sau:
h = h * 3 + 1 trong đó: h là Khoảng (interval) với giá trị ban đâu là 1
Giải thuật này khá hiệu quả với các tập dữ liệu có kích cỡ trung bình khi mà độ phức tạp trường hợp xấu nhất và trường hợp trung bình là O(n), với n là số phần tử.
Cách Shell Sort làm việc
Để dễ tìm hiểu hơn, dưới đây mình cung cấp các hình minh họa cho cách Shell Sort làm việc. Chúng ta sử dụng một mảng gồm các giá trị như dưới đây. Giả sử ban đầu giá trị Khoảng (interval) là 4. Ví dụ, với phần tử 35 thì với khoảng là 4 thì phần tử còn lại sẽ là 14. Do đó ta sẽ có các cặp giá trị {35, 14}, {33, 19}, {42, 27}, và {10, 14}.

So sánh các giá trị này với nhau trong các danh sách con và tráo đổi chúng (nếu cần) trong mảng ban đầu. Sau bước này, mảng mới sẽ trống như sau:

Sau đó, lấy giá trị Khoảng (interval) là 2 và với khoảng cách này sẽ cho hai danh sách con: {14, 27, 35, 42}, {19, 10, 33, 44}.

Tiếp tục so sánh và tráo đổi các giá trị (nếu cần) trong mảng ban đầu. Sau bước này, mảng sẽ trông như sau:

Cuối cùng, chúng ta sắp xếp phần mảng còn lại này với Khoảng (interval) bằng 1. Shell Sort sử dụng giải thuật sắp xếp chèn để sắp xếp mảng. Dưới đây là hình minh họa cho từng bước.

Như trên các hình trên, bạn thấy rằng chúng ta chỉ cần 4 lần tráo đổi để sắp xếp phần mảng còn lại này.
Giải thuật cho Shell Sort
Bây giờ chúng ta sẽ theo dõi giải thuật cho Shell Sort:
Bước 1: Khởi tạo giá trị h Bước 2: Chia list thành các sublist nhỏ hơn tương ứng với h Bước 3: Sắp xếp các sublist này bởi sử dụng sắp xếp chèn (Insertion Sort) Bước 4: Lặp lại cho tới khi list đã được sắp xếp
Giải thuật mẫu cho Shell Sort
Từ các bước trên chúng ta có thể thiết kế một giải thuật mẫu cho Shell Sort như sau:
Bắt đầu hàm shellSort() A : mảng các phần tử /* Tính toán giá trị Khoảng (interval)*/ while interval < A.length /3 thực hiện: interval = interval * 3 + 1 kết thúc while while interval > 0 thực hiện: for outer = interval; outer < A.length; outer ++ thực hiện: /* chọn giá trị để chèn */ valueToInsert = A[outer] inner = outer; /*dịch chuyển phần tử sang phải*/ while inner > interval -1 && A[inner - interval] >= valueToInsert do: A[inner] = A[inner - interval] inner = inner - interval kết thúc while /* chèn giá trị vào vị trí trên */ A[inner] = valueToInsert kết thúc for /* Tính toán giá trị Khoảng (interval)*/ interval = (interval -1) /3; kết thúc while Kết thúc hàm
Theo Tutorialspoint
Bài trước: Giải thuật sắp xếp trộn (Merge Sort)
Bài tiếp: Giải thuật sắp xếp nhanh (Quick Sort)
Bạn nên đọc
-
Công thức tính diện tích hình thoi, chu vi hình thoi
-
Công thức tính diện tích hình bình hành, chu vi hình bình hành
-
Diện tích hình trụ: Diện tích xung quanh hình trụ, diện tích toàn phần hình trụ
-
Công thức tính diện tích mặt cầu, thể tích khối cầu
-
Công thức tính diện tích hình hộp chữ nhật
-
Công thức tính chu vi hình tứ giác, diện tích hình tứ giác
Theo Nghị định 147/2024/ND-CP, bạn cần xác thực tài khoản trước khi sử dụng tính năng này. Chúng tôi sẽ gửi mã xác thực qua SMS hoặc Zalo tới số điện thoại mà bạn nhập dưới đây:
Cũ vẫn chất
-

Stt thay đổi bản thân, cap thay đổi bản thân tạo động lực trong cuộc sống
2 ngày -

Hướng dẫn đổi code Untitled Boxing game
2 ngày -

Cách trồng hành tây trong cốc nước vừa trang trí vừa giúp giảm stress
2 ngày -

Cách download Windows 10, tải file ISO Windows 10 từ Microsoft
2 ngày 20 -

Cách đổi dấu phẩy thành dấu chấm trên Word
2 ngày -

Tại sao nên thay đổi vị trí tải xuống mặc định trong Windows 11?
2 ngày -

Ngày đẹp khai xuân 2024, ngày tốt khai trương đầu năm 2024
2 ngày -

Xóa tận gốc các file "cứng đầu" nhất trên Windows
2 ngày -

Cách kiểm tra lịch sử trên máy tính để biết có ai đó đã truy cập và sử dụng máy tính của bạn?
2 ngày -

Cách cài đặt các codec HEVC miễn phí trên Windows 10 (cho video H.265)
2 ngày
Học IT
Lập trình
Microsoft Word 2013
Microsoft Word 2007
Microsoft Excel 2019
Microsoft Excel 2016
Microsoft PowerPoint 2019
Google Sheets
Lập trình Scratch
Bootstrap
Prompt
Ô tô, Xe máy