Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 36 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
36
Dung lượng
1,89 MB
Nội dung
Môn học: Cấu trúc liệu Chương 3-Phần 2: Sắp xếp ThS Trương Thị Ngọc Phượng Khoa CNTT Trường ĐHSPKT TP HCM Nội dung I Bài toán xếp II PP đổi chỗ trực tiếp (Interchange sort) III PP chọn trực tiếp (Selection sort) IV PP chèn trực tiếp (Insertion sort) V PP bọt (Bubble sort) VI PP dựa phân hoạch (Quick sort) VII Bài tập Chương – Phần – Sắp xếp Trương Thị Ngọc Phượng - CNTT - SPKT I Bài toán xếp Định nghĩa Sắp xếp trình xử lý danh sách phần tử để đặ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ử Sắp tăng giảm Sử dụng kiểu liệu mảng để minh họa Phân loại Sắp xếp nội Sắp xếp ngoại Chương – Phần – Sắp xếp Trương Thị Ngọc Phượng - CNTT - SPKT Nội dung I Bài toán xếp II PP đổi chỗ trực tiếp (Interchange sort) III PP chọn trực tiếp (Selection sort) IV PP chèn trực tiếp (Insertion sort) V PP bọt (Bubble sort) VI PP dựa phân hoạch (Quick sort) VII Bài tập Chương – Phần – Sắp xếp Trương Thị Ngọc Phượng - CNTT - SPKT IV PP đổi chỗ trực tiếp Ý tưởng Xét tất cặp phần tử mảng Phần tử nhỏ đứng trước Là phương pháp đơn giản Chương – Phần – Sắp xếp Trương Thị Ngọc Phượng - CNTT - SPKT IV PP đổi chỗ trực tiếp Giải thuật Bước 1: i = 1; Bước 2: j = i+1; Trong mà j ≤ N thực Nếu a[j] < a[i] Hoán vị (a[i], a[j]); j = j+1; end; Bước 3: i = i+1; Nếu i < N: Lặp lại bước 2; Ngược lại: DỪNG Chương – Phần – Sắp xếp Trương Thị Ngọc Phượng - CNTT - SPKT IV PP đổi chỗ trực tiếp Ví dụ i=1, j=2 15 Không hoán vị i=1, j=3 15 HV(a[1], a[3]) i=1, j=4 15 Không hoán vị i=1, j=5 15 Không hoán vị i=1, j=6 15 Không hoán vị i=1, j=7 15 Không hoán vị Chương – Phần – Sắp xếp Trương Thị Ngọc Phượng - CNTT - SPKT IV PP đổi chỗ trực tiếp Ví dụ i=2, j=3 15 HV(a[2], a[3]) DỪNG ………… ………… i=6, j=7 15 Giải thuật dừng Chương – Phần – Sắp xếp Trương Thị Ngọc Phượng - CNTT - SPKT IV PP đổi chỗ trực tiếp Đánh giá giải thuật Số phép so sánh ? Số phép hoán vị ? Độ phức tạp: O(n2) Chương – Phần – Sắp xếp Trương Thị Ngọc Phượng - CNTT - SPKT Nội dung I Bài toán xếp II PP đổi chỗ trực tiếp (Interchange sort) III PP chọn trực tiếp (Selection sort) IV PP chèn trực tiếp (Insertion sort) V PP bọt (Bubble sort) VI PP dựa phân hoạch (Quick sort) VII Bài tập Chương – Phần – Sắp xếp 10 Trương Thị Ngọc Phượng - Nội dung I Bài toán xếp II PP đổi chỗ trực tiếp (Interchange sort) III PP chọn trực tiếp (Selection sort) IV PP chèn trực tiếp (Insertion sort) V PP bọt (Bubble sort) VI PP dựa phân hoạch (Quick sort) VII Bài tập Chương – Phần – Sắp xếp 22 Trương Thị Ngọc Phượng - CNTT - SPKT V PP bọt Ý tưởng Phần tử “nhẹ” “nổi” lên phía đầu mảng Phần tử “nhẹ” “nổi” cao (đứng vị trí nhỏ mảng) Ngược lại: Phần tử “nặng” “chìm” xuống cuối mảng Chương – Phần – Sắp xếp 23 Trương Thị Ngọc Phượng - CNTT - SPKT V PP bọt Giải thuật Bước 1: i = 1; Bước 2: j = N; Trong j > i thực hiện: Nếu a[j] < a[j-1] HoánVị(a[j], a[j-1]); j = j-1; end; Bước 3: i = i+1; Nếu i > N-1 DỪNG Ngược lại: Lặp lại Bước 2; Chương – Phần – Sắp xếp 24 Trương Thị Ngọc Phượng - CNTT - SPKT V PP bọt Ví dụ i=1 15 j=7 i=1 i=1 15 j=5 i=1 i=1 j=4 15 j=6 15 Không hoán vị 15 j=3 Chương – Phần – Sắp xếp 25 Trương Thị Ngọc Phượng - CNTT - SPKT V PP bọt Ví dụ i=1 i=1 j=2 j=1 15 15 ……………………… Chương – Phần – Sắp xếp 26 15 DỪNG Trương Thị Ngọc Phượng - CNTT - SPKT V PP bọt Đánh giá giải thuật Không nhận diện tình trạng có thứ tự hay có thứ tự phần mảng Phần tử nhỏ đưa vị trí nhanh Phần tử lớn đưa vị trí chậm Cải tiến: Thuật toán ShakerSort • Lượt đi: Đẩy phẩn tử nhỏ đầu mảng • Lượt về: Đẩy phần tử lớn cuối mảng Chương – Phần – Sắp xếp 27 Trương Thị Ngọc Phượng - CNTT - SPKT V PP bọt Đánh giá giải thuật Độ phức tạp: O(n2) Chương – Phần – Sắp xếp 28 Trương Thị Ngọc Phượng - CNTT - SPKT Nội dung I Bài toán xếp II PP đổi chỗ trực tiếp (Interchange sort) III PP chọn trực tiếp (Selection sort) IV PP chèn trực tiếp (Insertion sort) V PP bọt (Bubble sort) VI PP dựa phân hoạch (Quick sort) VII Bài tập Chương – Phần – Sắp xếp 29 Trương Thị Ngọc Phượng - CNTT - SPKT VI PP dựa phân hoạch Ý tưởng Cho x=a[k] giá trị phần tử dãy Phân hoạch dãy ban đầu thành phần x …Dãy 1…… Các phần tử nhỏ x ……Dãy 2… Các phần tử lớn hoac bang x Tiếp tục phân hoạch dãy DỪNG dãy có thứ tự Chương – Phần – Sắp xếp 30 Trương Thị Ngọc Phượng - CNTT - SPKT VI PP dựa phân hoạch Ví dụ Phân hoạch Dãy ban đầu i=1 8 i=2 3 15 j=6 HV(a[1], a[6]) 15 j=5 HV(a[2], a[5]) HV(a[2], a[5]) Dãy Chương – Phần – Sắp xếp 15 Dãy 31 Trương Thị Ngọc Phượng - CNTT - SPKT VI PP dựa phân hoạch Ví dụ Phân hoạch Dãy 2 15 i=2 j=3 15 1 15 Dãy 1.1 Phân hoạch Dãy 1.1 15 15 Chương – Phần – Sắp xếp 32 Trương Thị Ngọc Phượng - CNTT - SPKT VI PP dựa phân hoạch Giải thuật void QuickSort(int a[], int left, int right) { int i, j; int x; x = a[(left + right)/2]; i=left; j=right; do{ while(a[i] < x) i++; while(a[j] > x) j ; if(i [...]... thuật Bước 1: i = 1; Bước 2: j = N; Trong khi j > i thực hiện: Nếu a[j] < a[j -1] thì HoánVị(a[j], a[j -1] ); j = j -1; end; Bước 3: i = i +1; Nếu i > N -1 thì DỪNG Ngược lại: Lặp lại Bước 2; Chương 3 – Phần 2 – Sắp xếp 24 Trương Thị Ngọc Phượng - CNTT - SPKT V PP nổi bọt Ví dụ i =1 6 9 1 3 7 15 2 j=7 i =1 6 9 1 3 7 i =1 6 9 1 3 2 7 15 j=5 i =1 6 9 1 i =1 6 9 1 2 3 j=4 2 3 2 15 j=6 7 15 Không hoán vị 7 15 j=3 Chương... i ... bọt Ví dụ i =1 15 j=7 i =1 i =1 15 j=5 i =1 i =1 j=4 15 j=6 15 Không hoán vị 15 j=3 Chương – Phần – Sắp xếp 25 Trương Thị Ngọc Phượng - CNTT - SPKT V PP bọt Ví dụ i =1 i =1 j=2 j =1 15 15 ………………………... đổi chỗ trực tiếp Ví dụ i =1, j=2 15 Không hoán vị i =1, j=3 15 HV(a [1] , a[3]) i =1, j=4 15 Không hoán vị i =1, j=5 15 Không hoán vị i =1, j=6 15 Không hoán vị i =1, j=7 15 Không hoán vị Chương – Phần... Phượng - CNTT - SPKT VI PP dựa phân hoạch Ví dụ Phân hoạch Dãy 2 15 i=2 j=3 15 1 15 Dãy 1. 1 Phân hoạch Dãy 1. 1 15 15 Chương – Phần – Sắp xếp 32 Trương Thị Ngọc Phượng - CNTT - SPKT VI PP dựa