Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 103 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
103
Dung lượng
3,14 MB
Nội dung
PHÂN TÍCH CÁC GIẢI THUẬT SẮP XẾP 1 Nội dung Giải thuật Insertion-Sort Các giải thuật chia để trị Giải thuật Quicksort Giải thuật Mergesort Giải thuật HeapSort Giải thuật Couting Sort 2 Insertion Sort 3 Insertion Sort – Ý tưởng Mọi dãy luôn có i-1phần tử đầu tiên đã có thứ tự (i ≥ 2) Tìm cách chèn phần tử vào vị trí thích hợp của đoạn đã được sắp để có dãy mới trở nên có thứ tự Vị trí này chính là pos thỏa : ≤ (1≤pos≤i) 4 Chương 4: Sắp xếp Insertion Sort – Ví dụ 2 8 5 1 6 4 1512 1 2 3 4 5 6 70 5 Chương 4: Sắp xếp Insertion Sort – Ví dụ 2 8 5 1 6 4 1512 i x 1 2 3 4 5 6 70 pos 2 !"# 6 Chương 4: Sắp xếp Insertion Sort – Ví dụ 12 8 5 1 6 4 152 i x 1 2 3 4 5 6 70 pos !"$# 8 7 Chương 4: Sắp xếp Insertion Sort – Ví dụ 8 12 5 1 6 4 152 i x 1 2 3 4 5 6 70 pos % !"$%# 5 8 Chương 4: Sắp xếp Insertion Sort – Ví dụ 5 8 12 1 6 4 152 i x 1 2 3 4 5 6 70 pos & !"$&# 1 9 Chương 4: Sắp xếp Insertion Sort – Ví dụ 2 5 8 12 6 4 151 i x 1 2 3 4 5 6 70 pos ' !"$'# 6 10 Chương 4: Sắp xếp [...]... Quick sort gồm: - Nó là một giải thuật đệ quy - Nó cần khoảng N2 thao tác căn bản trong trường hợp xấu nhất - Nó dễ bị lỗi khi lập trình (fragile) Giải thuật căn bản của Quicksort Quicksort là một phương pháp xếp thứ tự theo kiểu “chia để trị” Nó thực hiện bằng cách phân hoạch một tập tin thành hai phần và sắp thứ tự mỗi phần một cách độc lập với nhau Giải thuật có cấu trúc như sau: void quicksort1(int... partition(left,right); quicksort(left,i-1); quicksort(i+1,right); } } TỔNG HỢP CHIA TRỊ Giải thuật căn bản của Quicksort //x=A[r] luôn được chọn làm phần tử chốt (pivot) Phân tích độ phức tạp: trường hợp xấu nhất Phân tích độ phức tạp: trường hợp tốt nhất • Trường hợp tốt nhất xảy ra với Quicksort là khi mỗi lần phân hoạch chia tập tin ra làm hai phần bằng nhau Điều này làm cho số lần so sánh... Insertion Sort – Đánh giá thuật toán 17 Đối với mỗi i = 1, 3, , n -1, trong đó n =length[A], gọi tJ là số lần kiểm tra vòng lặp while trong dòng 5 được thực thi Gọi T(n) là thời gian thực hiện thuật giải T(n) = c1n + c2(n-1)+ c4(n-1)+ c5Σj=2,ntj+ c6Σj=2,n (tj-1) + c7Σj=2,n (tj-1)+ c8(n-1) Insertion Sort – Đánh giá thuật toán 18 Trường hợp tốt nhất: Khi dãy đã được sắp xếp, j = 1 Daạng an +... từng phần tử khi phân hoạch lần đầu • Từ chương 1, việc giải hệ thức truy hồi này đã đưa đến lời giải: CN ≈ N lgN Phân tích độ phức tạp: trường hợp xấu nhất • Một trường hợp xấu nhất của Quicksort là khi tập tin đã có thứ tự rồi • Khi đó, phần tử thứ nhất sẽ đòi hỏi n so sánh để nhận ra rằng nó nên ở đúng vị trí thứ nhất Hơn nữa, sau đó phân đoạn bên trái là rỗng và và phân đoạn bên phải... Insertion Sort – Đánh giá thuật toán 14 void InsertionSort(int a[], int n){ 0 int pos, key; 1 for(int i=1; i0 && key . PHÂN TÍCH CÁC GIẢI THUẬT SẮP XẾP 1 Nội dung Giải thuật Insertion-Sort Các giải thuật chia để trị Giải thuật Quicksort Giải thuật Mergesort Giải thuật HeapSort Giải thuật Couting. c 7 Σ j=2,n (t j -1)+ c 8 (n-1) 17 Chương 4: Sắp xếp Insertion Sort – Đánh giá thuật toán Trường hợp tốt nhất: Khi dãy đã được sắp xếp, j = 1 18 Chương 4: Sắp xếp Dang an + b đô phưc tap. !"$)# 15 12 Chương 4: Sắp xếp Insertion Sort – Ví dụ 2 4 5 6 8 12 151 pos 1 2 3 4 5 6 70 13 Chương 4: Sắp xếp Insertion Sort – Đánh giá thuật toán void InsertionSort(int