Tài liệu hướng dẫn thực hành môn Cấu trúc dữ liệu và giải thuật HCMUS 2010 T ra n g 1 CÁC THUẬT TOÁN SẮP XẾP MỤC TIÊU Hoàn tất bài thực hành này, sinh viên có thể Hiểu được các thuật toán sắp xếp Sele[.]
CÁC THUẬT TỐN SẮP XẾP MỤC TIÊU Hồn tất thực hành này, sinh viên có thể: - Hiểu thuật toán xếp: Selection Sort, Heap Sort, Quick Sort, Merge Sort Áp dụng thuật toán xếp để giải toán xếp đơn giản Áp dụng thuật toán xếp để giải toán xếp danh sách cấu trúc theo khóa So sánh, đánh giá thời gian chạy thuật toán với số lượng phần tử lớn Thời gian thực hành: từ 120 phút đến 400 phút TĨM TẮT Sắp xếp q trình xử lý danh sách phần tử (hoặc mẫu tin) để đặt chúng theo thứ tự thỏa mãn tiêu chuẩn dựa nội dung thơng tin lưu giữ phần tử Mức độ hiệu giải thuật phụ thuộc vào tính chất cấu trúc liệu cụ thể mà tác động đến Có nhiều giải thuật xếp: Selection sort, Insertion sort, Interchange sort, Bubble sort, Shaker sort, Binary Insertion sort, Shell sort, Heap sort, Quick sort, Merge sort, Radix sort… Selection sort Chọn phần tử nhỏ N phần tử ban đầu, đưa phần tử vị trí đầu dãy hành Xem dãy hành N-1 phần tử dãy ban đầu, vị trí thứ 2; lặp lại trình cho dãy hành đến dãy hành phần tử Heap sort Heap dãy phần tử aleft, aleft+1, , aright cho: ≥ a2i ≥ a2i+1, ∀i ∈ [left, right] (ai , a2i), (ai ,a2i+1): cặp phần tử liên đới Heap định nghĩa dùng trường hợp xếp tăng dần, xếp giảm dần phải đổi chiều quan hệ Ví dụ 1: Dãy số bố trí theo quan hệ so sánh tạo thành cấu trúc sau: Phần tử mức i phần tử lớn cặp phần tử tương ứng mức i+1 Trang Ví dụ 2: Loại bỏ khỏi Tài liệu hướng dẫn thực hành môn Cấu trúc liệu giải thuật HCMUS 2010 Tiến hành nhiều lần việc loại bỏ phần tử gốc tất phần tử ∞, xếp phần tử theo thứ tự loại bỏ có dãy xếp Quick sort Phân chia dãy thành đoạn sau: Đoạn thứ có thứ tự Nếu đoạn có phần tử chúng có thứ tự, dãy ban đầu Ngược lại, đoạn có nhiều phần tử dãy ban đầu có thứ tự đoạn 1, Để xếp đoạn 3, ta tiến hành việc phân hoạch dãy theo phương pháp phân hoạch dãy ban đầu vừa trình bày … Với x phần tử tùy ý dãy thường chọn vị trí dãy ban đầu Merge sort Phân hoạch dãy ban đầu thành dãy liên tiếp mà dãy có thứ tự Làm giảm số dãy cách trộn cặp dãy hai dãy phụ thành dãy dãy ban đầu NỘI DUNG THỰC HÀNH Cơ Sinh viên đọc kỹ phát biểu tập thực theo hướng dẫn: Sử dụng thuật toán Selection Sort, Heap Sort, Quick Sort, Merge Sort để xếp dãy số nguyên theo thứ tự tăng dần Người dùng nhập chiều dài n phần tử dãy ngun A từ bàn phím Tồn dãy A lưu trữ mảng số nguyên Lần lượt sử dụng thuật toán Selection Sort, Heap Sort, Quick Sort, Merge Sort để xếp dãy A Chương trình in kết xếp theo thuật toán hình Phân tích Tài liệu hướng dẫn thực hành môn Cấu trúc liệu giải thuật HCMUS 2010 Trang - Phân tích Dùng vịng lặp để tìm phần tử nhỏ dãy hành Đảo phần tử đầu mảng Chương trình mẫu (CacThuatToanSapXep) Selection sort #include void Swap(int &a, int &b) { int c = a; a = b; b = c; } void SelectionSort(int a[],int N ){ //Ghi chú: khơng sử dụng kí hiệu & hàm này? int min; //chỉ số phần tử nhỏ dãy hành for (int i=0; i