http://vietjack.com/cau-‐truc-‐du-‐lieu-‐va-‐giai-‐thuat/index.jsp Copyright © vietjack.com Shell Sort cấu trúc liệu giải thuật Shell Sort ? Shell Sort giải thuật xếp mang lại hiệu cao dựa giải thuật xếp chèn (Insertion Sort) Giải thuật tránh trường hợp phải tráo đổi vị trí hai phần tử xa giải thuật xếp chọn (nếu phần tử nhỏ vị trí bên phải xa so với phần tử lớn bên trái) Đầu tiên, giải thuật sử dụng giải thuật xếp chọn phần tử có khoảng cách xa nhau, sau xếp phần tử có khoảng cách hẹp Khoảng cách gọi khoảng (interval) – số vị trí từ phần tử tới phần tử khác Khoảng tính dựa vào cơng thức Knuth sau: h = h * + đó: h Khoảng (interval) với giá trị ban đâu Giải thuật hiệu với tập liệu có kích cỡ trung bình mà độ phức tạp trường hợp xấu trường hợp trung bình O(n), với n số phần tử Cách Shell Sort làm việc Để dễ tìm hiểu hơn, cung cấp hình minh họa cho cách Shell Sort làm việc Chúng ta sử dụng mảng gồm giá trị Giả sử ban đầu giá trị Khoảng (interval) Ví dụ, với phần tử 35 với khoảng phần tử lại 14 Do ta có cặp giá trị {35, 14}, {33, 19}, {42, 27}, {10, 14} http://vietjack.com/ Trang chia sẻ các bài học online miễn phí http://vietjack.com/cau-‐truc-‐du-‐lieu-‐va-‐giai-‐thuat/index.jsp Copyright © vietjack.com So sánh giá trị với danh sách tráo đổi chúng (nếu cần) mảng ban đầu Sau bước này, mảng trống sau: Sau đó, lấy giá trị Khoảng (interval) với khoảng cách cho hai danh sách con: {14, 27, 35, 42}, {19, 10, 33, 44} http://vietjack.com/ Trang chia sẻ các bài học online miễn phí http://vietjack.com/cau-‐truc-‐du-‐lieu-‐va-‐giai-‐thuat/index.jsp Copyright © vietjack.com Tiếp tục so sánh tráo đổi giá trị (nếu cần) mảng ban đầu Sau bước này, mảng trông sau: Cuối cùng, xếp phần mảng lại với Khoảng (interval) Shell Sort sử dụng giải thuật xếp chèn để xếp mảng Dưới hình minh họa cho bước http://vietjack.com/ Trang chia sẻ các bài học online miễn phí http://vietjack.com/cau-‐truc-‐du-‐lieu-‐va-‐giai-‐thuat/index.jsp Copyright © vietjack.com http://vietjack.com/ Trang chia sẻ các bài học online miễn phí http://vietjack.com/cau-‐truc-‐du-‐lieu-‐va-‐giai-‐thuat/index.jsp Copyright © vietjack.com Như hình trên, bạn thấy cần lần tráo đổi để xếp phần mảng lại Giải thuật cho Shell Sort Bây 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 sublist nhỏ tương ứng với h Bước 3: Sắp xếp sublist sử dụng xếp chèn (Insertion Sort) Bước 4: Lặp lại list xếp Giải thuật mẫu cho Shell Sort Từ bước thiết kế giải thuật mẫu cho Shell Sort sau: Bắt đầu hàm shellSort() A : mảng phần tử /* Tính tốn giá trị Khoảng (interval)*/ while interval < A.length /3 thực hiện: interval = interval * + kết thúc while while interval > 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í */ A[inner] = valueToInsert kết thúc for /* Tính tốn giá trị Khoảng (interval)*/ interval = (interval -1) /3; kết thúc while Kết thúc hàm Để theo dõi code đầy đủ giải thuật Shell Sort ngôn ngữ C, mời bạn click chuột vào chương: Shell Sort C http://vietjack.com/ Trang chia sẻ các bài học online miễn phí ... (Insertion Sort) Bước 4: Lặp lại list xếp Giải thuật mẫu cho Shell Sort Từ bước thiết kế giải thuật mẫu cho Shell Sort sau: Bắt đầu hàm shellSort() A : mảng phần tử /* Tính tốn giá trị Khoảng (interval)*/... cho Shell Sort Bây 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 sublist nhỏ tương ứng với h Bước 3: Sắp xếp sublist sử dụng xếp chèn (Insertion Sort) ... /3; kết thúc while Kết thúc hàm Để theo dõi code đầy đủ giải thuật Shell Sort ngôn ngữ C, mời bạn click chuột vào chương: Shell Sort C http://vietjack.com/