Bài giảng Lập trình C cơ bản: Tuần 11
lượt xem 1
download
Bài giảng Lập trình C cơ bản: Tuần 11 cung cấp cho sinh viên những nội dung gồm: các giải thuật sắp xếp nâng cao; sắp xếp nhanh; mergesort; bài tập;... Mời các bạn cùng tham khảo chi tiết nội dung bài giảng!
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Lập trình C cơ bản: Tuần 11
- C Programming Basic – week 11
- Nội dung • Các giải thuật sắp xếp nâng cao 1. Sắp xếp nhanh 2. Mergesort • Bài tập 2
- 1. Sắp xếp nhanh Cho mảng n phần tử (vd số nguyên): • If n=1, return • Else – Chọn một phần tử làm pivot. – Chia mảng thành 2 mảng con • Các phần tử ≥ pivot • Các phần tử < pivot – Sắp xếp hai mảng con – Return kết quả 3
- VD • Cho mảng các số nguyên 40 20 10 80 60 50 7 30 100 4
- Quick Sort (Hoare) • Given (R0, R1, …, Rn-1) Ki: pivot key if Ki is placed in S(i), then Kj Ks(i) for j < S(i), Kj Ks(i) for j > S(i). • R0, …, RS(i)-1, RS(i), RS(i)+1, …, RS(n-1) two partitions 5
- Phân vùng • Cho một pivot, phân vùng sao cho mảng có: 1. Một mảng con chứa các phần tử >= pivot 2. Mảng con còn lại chứa các phần tử < pivot • Hai mảng con được sắp xếp trực tiếp trên mảng gốc • Phân vùng bằng cách đổi chỗ 6
- VD phân vùng 7 20 10 30 40 50 60 80 100 [0] [1] [2] [3] [4] [5] [6] [7] [8] data[pivot] 7
- Đệ quy 7 20 10 30 40 50 60 80 100 [0] [1] [2] [3] [4] [5] [6] [7] [8] data[pivot] 8
- VD R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 left right { 26 5 37 1 61 11 59 15 48 19} 0 9 { 11 5 19 1 15} 26 { 59 61 48 37} 0 4 { 1 5} 11 {19 15} 26 { 59 61 48 37} 0 1 1 5 11 15 19 26 { 59 61 48 37} 3 4 1 5 11 15 19 26 { 48 37} 59 { 61} 6 9 1 5 11 15 19 26 37 48 59 { 61} 6 7 1 5 11 15 19 26 37 48 59 61 9 9 1 5 11 15 19 26 37 48 59 61 9
- Quick Sort void quicksort(element list[], int left, int right) { int pivot, i, j; element temp; if (left < right) { i = left; j = right+1; pivot = list[left].key; do { do i++; while (list[i].key < pivot); do j--; while (list[j].key > pivot); if (i < j) SWAP(list[i], list[j], temp); } while (i < j); SWAP(list[left], list[j], temp); quicksort(list, left, j-1); quicksort(list, j+1, right); } } 10
- Exercise 11.1 • Xây dựng danh bạ điện thoại • Định nghĩa cấu trúc chứa các thông tin “name”, “phone number” và “e-mail address”, khai báo mảng chứa 100 phần tử • Viết chương trình đọc 10 bản ghi từ tệp, sắp xếp theo thứ tự tăng dần và ghi ra tệp. Sử dụng giải thuật sắp xếp nhanh 11
- Exercise 11.2 • Khởi tạo một mảng gồm n số nguyên ngẫu nhiên. N được nhập bởi người dùng • Sắp xếp mảng sử dụng sắp xếp chèn và sắp xếp nhanh • So sánh thời gian thực hiện của hai giải thuật • Chạy chương trình với các giá trị khác nhau của n và nhận xét 12
- Exercise 11.3 • Viết chương trình lựa chọn giải thuật sắp xếp – Nếu số phần tử > x, chọn sắp xếp nhanh, nếu không chọn sắp xếp chèn • Chú ý: x là một tham số của chương trình • Đọc một tệp văn bản có nhiều hơn 100 kí tự, sắp xếp 100 kí tự đầu tiên, và in kết quả ra màn hình 13
- 2. Mergesort • Phát biểu bài toán: Cho n phần tử, sắp xếp các phần tử theo thứ tự không giảm • Áp dụng chiến thuật chia-để-trị – If n=1 dừng – If n>1, phân vùng thành hai mảng con; sắp xếp các mảng con; kết hợp lại thành một mảng được sắp xếp 14
- Giải thuật MergeSort (E[ 0 .. N]) if N < threshold InsertionSort ( E[0..N] ) else copy E[0.. N/2] to U[0.. N/2] copy E[N/2 .. N] to V[0 .. N-N/2] MergeSort(U[0 .. N/2]) MergeSort(V[0 .. N-N/2]) Merge( U[0 .. N/2], V[0 .. N-N/2}, E[0 .. N] ) 15
- VD 5 2 4 6 1 3 2 6 5 2 4 6 1 3 2 6 5 2 4 6 1 3 2 6 5 2 4 6 1 3 2 6 2 5 4 6 1 3 2 6 2 4 5 6 1 3 2 6 1 2 2 3 4 5 6 6 16
- Minh họa 3 5 7 8 10 3 5 7 8 10 1 2 4 6 9 2 4 6 9 1 3 5 7 8 10 5 7 8 10 4 6 9 4 6 9 1 2 1 2 3 5 7 8 10 6 9 1 2 17 3 4 17
- Giải thuật kết hợp Merge(U[0..m],V[0..n],E[0..n+m]) i = 0 , j = 0 k = 0 while k < n+m if U[i] < V [j] E[k] = U[i] , i++ else E[k] = V[j] , j++ k++ 18
- Exercise 11.4 • Xây dựng danh bạ điện thoại • Định nghĩa cấu trúc chứa các thông tin “name”, “phone number” và “e-mail address”, khai báo một danh sách liên kết đơn để lưu dữ liệu • Viết chương trình đọc 10 bản ghi từ tệp, sắp xếp tăng dần và in ra màn hình. Sử dụng giải thuật mergesort. 19
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Lập trình C cơ bản - ThS. Trương Đình Tú
81 p | 279 | 87
-
Bài giảng Lập trình C++: Chương 1 - GV. Nguyễn Văn Hùng
60 p | 195 | 36
-
Bài giảng Lập trình C++: Chương 7 - GV. Nguyễn Văn Hùng
25 p | 122 | 17
-
Bài giảng Lập trình C trên Windows: Thư viện lập trình Multi-Media
7 p | 65 | 6
-
Bài giảng Lập trình C cơ bản: Tuần 8
53 p | 7 | 1
-
Bài giảng Lập trình C cơ bản: Tuần 9
31 p | 5 | 1
-
Bài giảng Lập trình C cơ bản: Tuần 10
22 p | 3 | 1
-
Bài giảng Lập trình C cơ bản: Tuần 12
11 p | 6 | 1
-
Bài giảng Lập trình C cơ bản: Tuần 13
20 p | 3 | 1
-
Bài giảng Lập trình C cơ bản: Tuần 7
15 p | 9 | 1
-
Bài giảng Lập trình C cơ bản: Tuần 6
18 p | 6 | 1
-
Bài giảng Lập trình C cơ bản: Tuần 5
33 p | 4 | 1
-
Bài giảng Lập trình C cơ bản: Tuần 4
32 p | 11 | 1
-
Bài giảng Lập trình C cơ bản: Tuần 3
82 p | 11 | 1
-
Bài giảng Lập trình C cơ bản: Tuần 2
30 p | 9 | 1
-
Bài giảng Lập trình C cơ bản: Tuần 1
44 p | 11 | 1
-
Bài giảng Lập trình C cơ bản: Tuần 14
48 p | 3 | 1
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn