Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 27 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
27
Dung lượng
710,65 KB
Nội dung
Cấu trúc liệu giải thuật Bài Sắp xếp nhanh - Quick Sorts Lecturer: PhD Ngo Huu Phuc Tel: 0438 326 077 Mob: 098 5696 580 Email: ngohuuphuc76@gmail.com Ngo Huu Phuc, Le Quy Don Technical University Bài Quick Sorts Nội dung: 6.1 Thuật toán QuickSort (6) 6.2 Ví dụ QuickSort (7) 6.3 Hoạt động QuickSort (6) 6.4 Hiệu QuickSort (6) Tham khảo: Intro to Algorithms Chapter QuickSort.htm Lecture – quicksort.htm Quick Sort.htm Bài giảng TS Nguyễn Nam Hồng Ngo Huu Phuc, Le Quy Don Technical University 6.1 Thuật toán QuickSort (1/6) Giải thuật Quick-sort phương pháp xếp dựa chiến lược chia để trị Giải thuật gồm bước: Phép chia: chọn ngẫu nhiên phần tử x làm khóa, chia tập liệu S ban đầu thành phần: L chứa phần tử nhỏ x E chứa phần tử x x x L E G chứa phần tử lớn x Bước lặp: xếp tập L G Hiệu chỉnh lại tập L, E G Ngo Huu Phuc, Le Quy Don Technical University x G 6.1 Thuật toán QuickSort (2/6) Các bước thuật toán: Chia tập liệu ban đầu thành tập con: cho, tất phần tử bên trái nhỏ tất phần tử bên phải Sắp xếp tập cách độc lập nối chúng lại với nhau: vậy, ta dãy xếp Ngo Huu Phuc, Le Quy Don Technical University 6.1 Thuật toán QuickSort (3/6) Với tập trên, tập chia thành 02 tập vậy, ta có tối đa 04 tập tập phần tử nhỏ bên trái cùng, tập phần tử lớn bên phải Lặp lại trình tập có phần tử nối tất tập với ta dãy xếp Ngo Huu Phuc, Le Quy Don Technical University 6.1 Thuật toán QuickSort (4/6) Ta chia t ập liệu ban đầu sau: Trên tập S, lấy phần tử y lấy khỏi tập Đưa phần tử y vào tập L, E hay G, tùy thuộc vào phép so sánh với khóa x Với phép lấy phần tử đưa chúng vào tập tương ứng, độ phức tạp phép tốn O(1) Như vậy, phép chia liệu thuật tốn QuickSort có độ phức tạp O(n) Ngo Huu Phuc, Le Quy Don Technical University 6.1 Thuật toán QuickSort (5/6) → → 2→2 Ngo Huu Phuc, Le Quy Don Technical University → 9→9 6.1 Thuật toán QuickSort (6/6) Việc thực thi giải thuật QuickSort mô tả qua nhị phân: Mỗi node biểu diễn lần gọi đệ quy lưu giữ: Dãy chưa xếp khóa Dãy sau xếp Gốc lần gọi đệ quy Các lần gọi ứng với dãy có kích thước Ngo Huu Phuc, Le Quy Don Technical University 6.2 Ví dụ QuickSort (1/7) Chọn khóa Ngo Huu Phuc, Le Quy Don Technical University 6.2 Ví dụ QuickSort (2/7) Phân chia dãy ban đầu gọi đệ quy với khóa chọn 10 Ngo Huu Phuc, Le Quy Don Technical University 6.2 Ví dụ QuickSort (5/7) Tương tự cho phần bên phải 13 Ngo Huu Phuc, Le Quy Don Technical University 6.2 Ví dụ QuickSort (6/7) Gọi đệ quy cho dãy con, với khóa 14 Ngo Huu Phuc, Le Quy Don Technical University 6.2 Ví dụ QuickSort (7/7) Nối kết cho gốc 15 Ngo Huu Phuc, Le Quy Don Technical University 6.3 Hoạt động QuickSort (1/6) Có thể mơ tả sau: Với tập ban đầu, chọn phần tử làm khóa Đổi chỗ phần tử với khóa Sử dụng số i j để duyệt phần lại dãy Chỉ số i tăng đến vị trí i đó, phần tử có giá trị lớn khóa Chỉ số j giảm đến giá trị vị trí j nhỏ khóa So sánh i j, i p 19 Ngo Huu Phuc, Le Quy Don Technical University 6.3 Hoạt động QuickSort (5/6) #include "stdio.h" void inputdata(int list[],int n) #include "conio.h" { #define MAX 100 int i; void swap(int *x,int *y); printf("Nhap cac phan tu cho mang\n"); int getkeyposition(int i,int j); for(i=0;i