Data structures and algorithms GIẢNG VIÊN: TS HÀ CHÍ TRUNG BỘ MÔN: KHMT KHOA CNTT, HVKTQS ĐT:0168.558.21.02 EMAIL: HCT2009@YAHOO.COM Lecture 05 – Basic Sorting Algorithms 5.1 Khái niệm vai trò xếp 5.1.1 Sắp xếp vai trò xếp 5.1.2 Một số ứng dụng xếp 5.1.3 Ý tưởng xếp phương pháp thực 5.1.4 Phân tích hiệu giải thuật xếp 5.2 Một số phương pháp xếp đơn giản 5.2.1 Sắp xếp chọn 5.2.2 Sắp xếp chèn 5.2.3 Sắp xếp bọt 5.3 Bài tập thực hành ©TS Hà Chí Trung, Khoa CNTT - HVKTQS 24-Mar-11 Lecture 05 – Basic Sorting Algorithms 5.1 Khái niệm vai trò xếp 5.1.1 Sắp xếp vai trò xếp 5.1.2 Một số ứng dụng xếp 5.1.3 Ý tưởng xếp phương pháp thực 5.1.4 Phân tích hiệu giải thuật xếp 5.2 Một số phương pháp xếp đơn giản 5.2.1 Sắp xếp chọn 5.2.2 Sắp xếp chèn 5.2.3 Sắp xếp bọt 5.3 Bài tập thực hành ©TS Hà Chí Trung, Khoa CNTT - HVKTQS 24-Mar-11 5.1.1 Sắp xếp vai trò xếp Thế xếp? Đưa dãy đối tượng dạng thứ bậc Giải thuật xếp dựa so sánh Việc xếp dựa phép toán so sánh Các phép toán xếp: So sánh (compare); Tráo đổi phần tử (swap) ©TS Hà Chí Trung, Khoa CNTT - HVKTQS 24-Mar-11 5.1.1 Sắp xếp vai trò xếp Quy ước: Trong chương trình, ta nghiên cứu phương pháp xếp Các giải thuật thay cho (tùy trường hợp vận dụng toán) Thành phần để xem xét xếp so sánh Mỗi mảng có số phần tử hữu hạn, N số phần tử cần xếp ©TS Hà Chí Trung, Khoa CNTT - HVKTQS 24-Mar-11 5.1.1 Sắp xếp vai trò xếp Nếu đối tượng mảng theo trật tự đó, truy xuất thơng tin nhanh chóng xác Việc xây dựng giải thuật cho phép xếp phần tử mảng nhiều thời gian, độ phức tạp giải thuật cỡ O(n2) ≈ 50,000,000,000,000 bước cho việc mảng có 10,000,000 phần tử ⇒ 500,000 giây = 58 ngày, với máy tính thực 100 triệu phép tính tốn/giây Với giải thuật xếp cho mảng, độ phức tạp giải thuật cỡ O(nlogn) ≈ 250,000,000 bước cho việc mảng có 10,000,000 phần tử ⇒ 2.5 giây, với máy tính thực 100 triệu phép tính tốn/giây ©TS Hà Chí Trung, Khoa CNTT - HVKTQS 24-Mar-11 5.1.1 Sắp xếp vai trò xếp Như vậy, xếp giải thuật bản: Thông thường, 25% khả CPU dành cho công việc xếp; Với kết trình xếp, số vấn đề thực dễ dàng; Sắp xếp bước cho số giải thuật khác Nói chung, có q trình xếp tăng tốc cho tìm kiếm Ví dụ: tìm kiếm nhị phân Có nhiều cách tiếp cận đến giải thuật xếp, từ đó, có nhiều giải thuật xếp khác ©TS Hà Chí Trung, Khoa CNTT - HVKTQS 24-Mar-11 5.1.1 Sắp xếp vai trò xếp Các vấn đề xếp: Sắp xếp theo trật tự tăng hay giảm? Với giải thuật xếp, dùng cho theo trật tăng hay giảm, việc thay đổi phép so sánh: = Các khóa giải thuật xếp? Có thể dùng nhiều khóa cho giải thuật xếp Cần lưu ý đến ý tưởng toán Với liệu khơng phải số sao? Với chuỗi, sử dụng phép so sánh chuỗi, từ điển, hay quy tắc ( Ví dụ: Sắp chuỗi Brown-Williams, Brown America, Brown, John?) ©TS Hà Chí Trung, Khoa CNTT - HVKTQS 24-Mar-11 Lecture 05 – Basic Sorting Algorithms 5.1 Khái niệm vai trò xếp 5.1.1 Sắp xếp vai trò xếp 5.1.2 Một số ứng dụng xếp 5.1.3 Ý tưởng xếp phương pháp thực 5.1.4 Phân tích hiệu giải thuật xếp 5.2 Một số phương pháp xếp đơn giản 5.2.1 Sắp xếp chọn 5.2.2 Sắp xếp chèn 5.2.3 Sắp xếp bọt 5.3 Bài tập thực hành ©TS Hà Chí Trung, Khoa CNTT - HVKTQS 24-Mar-11 5.1.2 Một số ứng dụng xếp Một số ứng dụng có dùng xếp: Các từ từ điển xếp Thông thường, Files thư mục theo trật tự Trong thư viện, sách theo trật tự Các khóa học trường đại học theo khoa, theo mã khóa học Các kiện theo thời gian Ví dụ, có mảng sắp, dễ dàng tìm phần tử lớn thứ k mảng, với thời gian số ©TS Hà Chí Trung, Khoa CNTT - HVKTQS 10 24-Mar-11 5.2.3 Sắp xếp bọt Sắp xếp bọt kỹ thuật xếp đơn giản, kỹ thuật tổ chức phần tử mảng thành cặp liền kề: Với cặp liền kề, thứ i thứ i+1, đổi chỗ phần tử chúng không trật tự xếp Sau lần thực việc đổi chỗ, ta thu phần tử vị trí; Thực lặp lại q trình cho n-1 phần tử lại; Thuật tốn dừng khơng cặp sai vị trí ©TS Hà Chí Trung, Khoa CNTT - HVKTQS 49 24-Mar-11 5.2.3 Sắp xếp bọt i j ©TS Hà Chí Trung, Khoa CNTT - HVKTQS 10 3 15 50 24-Mar-11 5.2.3 Sắp xếp bọt i j ©TS Hà Chí Trung, Khoa CNTT - HVKTQS 1 10 15 51 24-Mar-11 5.2.3 Sắp xếp bọt i j ©TS Hà Chí Trung, Khoa CNTT - HVKTQS 1 2 10 15 52 24-Mar-11 5.2.3 Sắp xếp bọt i j ©TS Hà Chí Trung, Khoa CNTT - HVKTQS 1 2 3 10 5 15 53 24-Mar-11 5.2.3 Sắp xếp bọt i j ©TS Hà Chí Trung, Khoa CNTT - HVKTQS 1 2 3 10 15 54 24-Mar-11 5.2.3 Sắp xếp bọt i j ©TS Hà Chí Trung, Khoa CNTT - HVKTQS 1 2 3 10 15 55 24-Mar-11 5.2.3 Sắp xếp bọt i j ©TS Hà Chí Trung, Khoa CNTT - HVKTQS 1 2 3 10 15 56 24-Mar-11 5.2.3 Sắp xếp bọt i ©TS Hà Chí Trung, Khoa CNTT - HVKTQS 1 2 3 10 15 57 24-Mar-11 5.2.3 Sắp xếp bọt #include #include #define MAX 100 void inputdata(int list[],int n); void printlist(int list[],int n); void swap(int *x,int *y); void bubblesort(int list[], int n); void main() { int list[MAX], n; printf("Nhap so phan tu cua mang\n"); scanf("%d",&n); inputdata(list,n); printf("Mang da nhap:\n"); printlist(list,n); bubblesort(list,n); printf("Mang da sap xep:\n"); printlist(list,n); getch(); } ©TS Hà Chí Trung, Khoa CNTT - HVKTQS void inputdata(int list[],int n) { int i; printf("Nhap cac phan tu cua mang\n"); for(i=0;i