http://vietjack.com/cau-‐truc-‐du-‐lieu-‐va-‐giai-‐thuat/index.jsp Copyright © vietjack.com Giải thuật xếp chèn (Insertion Sort) Sắp xếp chèn (Insertion Sort) ? Sắp xếp chèn giải thuật xếp dựa so sánh in-place Ở đây, danh sách ln trì dạng qua xếp Sắp xếp chèn chèn thêm phần tử vào danh sách qua xếp Phần tử chèn vào vị trí thích hợp cho đảm bảo danh sách theo thứ tự Với cấu trúc liệu mảng, tưởng tượng là: mảng gồm hai phần: danh sách xếp phần khác phần tử chưa qua xếp Giải thuật xếp chèn thực việc tìm kiếm liên tiếp qua mảng đó, phần tử chưa qua xếp di chuyển chèn vào vị trí thích hợp danh sách (của mảng đó) Giải thuật khơng thích hợp sử dụng với tập liệu lớn độ phức tạp trường hợp xấu trường hợp trung bình Ο(n2) với n số phần tử Cách giải thuật xếp chèn thực hiện? Ví dụ có mảng gồm phần tử chưa qua xếp: Giải thuật xếp chèn so sánh hai phần tử đầu tiên: Giải thuật tìm 14 33 thứ tự tăng dần Bây giờ, 14 danh sách qua xếp Giải thuật xếp chèn tiếp tục di chuyển tới phần tử so sánh 33 27 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 Và thấy 33 khơng nằm vị trí Giải thuật xếp chèn tráo đổi vị trí 33 27 Đồng thời kiểm tra tất phần tử danh sách xếp Tại đây, thấy danh sách có phần tử 14 27 lớn 14 Do danh sách giữ nguyên sau tráo đổi Bây danh sách có hai giá trị 14 27 Tiếp tục so sánh 33 với 10 Hai giá trị không theo thứ tự Vì tráo đổi chúng Việc tráo đổi dẫn đến 27 10 không theo thứ tự 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 Vì tráo đổi chúng Chúng ta lại thấy 14 10 không theo thứ tự Và tiếp tục tráo đổi hai số Cuối cùng, sau vòng lặp thứ có phần tử Tiến trình tiếp tục diễn tất giá trị chưa xếp xếp hết vào danh sách qua xếp Tiếp theo tìm hiểu khía cạnh lập trình giải thuật xếp chèn Giải thuật xếp chèn (Insertion Sort) Từ minh họa có tranh tổng quát giải thuật xếp chèn, từ có bước giải thuật sau: Bước 1: Kiểm tra phần tử xếp trả Bước 2: Lấy phần tử Bước 3: So sánh với tất phần tử danh sách qua xếp Bước 4: Dịch chuyển tất phần tử danh sách mà lớn giá trị để xếp Bước 5: Chèn giá trị Bước 6: Lặp lại danh sách xếp Giải thuật mẫu cho xếp bọt Bắt đầu hàm insertionSort( A : mảng phần tử ) int holePosition int valueToInsert for i = tới length(A) thực hiện: /* chọn giá trị để chèn */ valueToInsert = A[i] holePosition = i /*xác định vị trí cho phần tử chèn */ while holePosition > A[holePosition-1] > valueToInsert thực hiện: A[holePosition] = A[holePosition-1] holePosition = holePosition -1 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 kết thúc while /* chèn giá trị vị trí */ A[holePosition] = valueToInsert kết thúc for Kết thúc hàm Để theo dõi code đầy đủ giải thuật xếp chèn ngôn ngữ C, mời bạn click chuột vào chương: Sắp xếp chèn (Insertion Sort) 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... sẻ các bài học online miễn phí http://vietjack.com/cau-‐truc-‐du-‐lieu-‐va- giai- thuat/ index.jsp Copyright... sẻ các bài học online miễn phí http://vietjack.com/cau-‐truc-‐du-‐lieu-‐va- giai- thuat/ index.jsp Copyright