Shell Sort là gì ?

Shell Sort là một giải thuật thu xếp mang lại hiệu quả cao dựa trên lời giải sắp xếp chèn (Insertion Sort). Giải mã này tránh những trường hợp phải tráo đổi vị trí của hai phần tử xa nhau trong lời giải sắp xếp chọn (nếu như phần tử bé dại hơn tại vị trí bên bắt buộc khá xa so với phần tử lớn hơn bên trái).

Bạn đang xem:

Đầu tiên, lời giải này sử dụng giải thuật sắp xếp lựa chọn trên các thành phần có khoảng cách xa nhau, tiếp đến sắp xếp các thành phần có khoảng cách hẹp hơn. Khoảng cách này nói một cách khác là khoảng (interval) – là số địa chỉ 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 + 1trong đó: h là khoảng tầm (interval) với mức giá trị ban đâu là 1Giải thuật này khá công dụng với những tập tài liệu có kích tầm trung bình khi cơ mà độ tinh vi trường đúng theo 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 có tác dụng việc

Để dễ khám phá hơn, dưới đây mình hỗ trợ các hình minh họa cho cách Shell Sort làm việc. Bọn họ sử dụng một mảng gồm những giá trị như dưới đây. đưa sử lúc đầu giá trị khoảng chừng (interval) là 4. Ví dụ, với bộ phận 35 thì với mức là 4 thì bộ phận còn lại đã là 14. Do đó ta sẽ sở hữu được các cặp cực hiếm 35, 14, 33, 19, 42, 27, và 10, 14.

*

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

*

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

*

Tiếp tục đối chiếu và tráo đổi các giá trị (nếu cần) vào mảng ban đầu. Sau bước này, mảng vẫn 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 tầm (interval) bằng 1. Shell Sort sử dụng giải mã sắp xếp chèn để thu xếp mảng. Dưới đây là hình minh họa mang lại từng bước.

Xem thêm: Bài Tập Trắc Nghiệm Lý 12 Chương 1 2 Có Đáp Án Và Lời Giải Chi Tiết

*

Như trên các hình trên, chúng ta thấy rằng họ chỉ cần 4 lần tráo thay đổi để bố trí phần mảng còn lại này.

Giải thuật mang lại Shell Sort

Bây giờ bọn họ sẽ theo dõi giải thuật cho Shell Sort:

Bước 1: Khởi sản xuất giá trị hBước 2: Chia các mục thành những sublist bé dại hơn khớp ứng với hBước 3: chuẩn bị xếp những sublist này bởi áp dụng sắp xếp chèn (Insertion Sort)Bước 4: Lặp lại tính đến khi danh mục đã được sắp xếp

Giải thuật mẫu cho Shell Sort

Từ công việc trên chúng ta có thể thiết kế một lời giải mẫu đến Shell Sort như sau:

Bắt đầu hàm shellSort() A : mảng các phần tử /* giám sát và đo lường giá trị Khoảng (interval)*/ while interval 0 thực hiện: for outer = interval; outer interval -1 && A >= valueToInsert do: A = A inner = inner - interval kết thúc while /* chèn quý hiếm vào địa chỉ trên */ A = valueToInsert kết thúc for /* đo lường giá trị Khoảng (interval)*/ interval = (interval -1) /3; ngừng whileKết thúc hàm