Bài giảng Lập trình C cơ bản: Tuần 10
lượt xem 1
download
Bài giảng Lập trình C cơ bản: Tuần 10 cung cấp cho sinh viên những nội dung gồm: các giải thuật sắp xếp cơ bản; sắp xếp chèn; sắp xếp lựa chọn; sắp xếp vun đống;... 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 10
- C Programming Basic – week 10
- Nội dung • Các giải thuật sắp xếp cơ bản – Sắp xếp chèn – Sắp xếp lựa chọn • Sắp xếp vun đống 2
- Sắp xếp chèn • Kĩ thuật xếp bài • Quy tắc – Tìm phần tử chưa sắp xếp đầu tiên – Đưa nó đến vị trí đúng – Độ phức tạp: O(n2) 3
- Original 23 78 45 8 32 56 8 23 45 78 32 56 Apter List step 3 unsorted sorted unsorted Apter Apter step 1 23 78 45 8 32 56 8 23 32 45 78 56 step 4 sorted unsorted unsorted Apter Apter step 2 23 45 78 8 32 56 8 23 32 45 56 78 step 5 sorted unsorted 4 unsorted
- Insertion Sort void insertion_sort(element list[], int n) { int i, j; element next; for (i=1; i=0 && next.key< list[j].key; j--) list[j+1] = list[j]; list[j+1] = next; } } 5
- Sắp xếp lựa chọn • Quy tắc – Tìm phần tử bé nhất (lớn nhất) trong danh sách – Đưa nó lên đầu (cuối) danh sách bằng cách đổi chỗ với phần tử đầu (cuối) 6
- Selection sort void selection(element a[], int n) { int i, j, min, tmp; for (i = 0; i < n-1; i++){ min = i; for (j = i+1; j
- Exercise 10.1 • Xây dựng danh bạ điện thoại • Khai báo cấu trúc với name, phone number, và email • Đọc 10 bản ghi từ tệp vào danh sách, sắp xếp theo thứ tự tăng dần và ghi ra tệp • Sử dụng sắp xếp chèn và sắp xếp lựa chọn • (1) Sử dụng mảng các cấu trúc • (2) Sử dụng danh sách liên kết đơn/đôi • In ra số phép so sánh trong mỗi giải thuật 8
- Sắp xếp vun đống • Đống: cây nhị phân – Root chứa giá trị lớn nhất – Cây đầy đủ hoặc gần đầy đủ – Nút cha có giá trị lớn hơn các nút con 9
- Sắp xếp vun đống (2) Array interpreted as a binary tree 1 2 3 4 5 6 7 8 9 10 26 5 77 1 61 11 59 15 48 19 [1] 26 input file [2] 5 [3] 77 [4] 1 [5] 61 [6] 11 [7] 59 [8] 15 [9] 48 [10] 19 10
- Minh họa [1] 61 [2] 48 [3] 59 [4] 15 [5] 19 [6] 11 [7] 26 [8] 5 [9] 1 [10] 77 (a) [1] 59 [2] 48 [3] 26 [4] 15 [5] 19 [6] 11 [7] 1 [8] 5 [9] 61 [10] 77 (b) 11
- Minh họa (2) [1] 48 [2] 19 [3] 26 [4] 15 [5] 5 [6] 11 [7] 1 [8] 59 59 [9] 61 [10] 77 61 (c) [1] 26 [2] 19 [3] 11 48 [4] 15 [5] 5 [6] 1 [7] 48 59 [8] 59 [9] 61 [10] 77 (d) 12
- Heap sort void adjust(element list[], int root, int n) { int child, rootkey; element temp; temp=list[root]; rootkey=list[root].key; child=2*root; while (child list[child].key) break; else { list[child/2] = list[child]; child *= 2; i } 2i 2i+1 } list[child/2] = temp; } 13
- Heap sort (2) void heapsort(element list[], int n) { ascending order (max heap) int i, j; element temp; bottom-up for (i=n/2; i>0; i--) adjust(list, i, n); n-1 cylces for (i=n-1; i>0; i--) { top-down SWAP(list[1], list[i+1], temp); adjust(list, 1, i); } } 14
- Minh họa Max heap following first for loop of heapsort initial heap [1] 77 [2] 61 [3] 59 exchange [4] 48 [5] 19 [6] 11 [7] 26 [8] 15 [9] 1 [10] 5 15
- Exercise 10.2 • Xây dựng danh bạ điện thoại • Viết chương trình có thể lưu trữ 100 cấu trúc chứa name, phone number, và email • Đọc 10 bản ghi từ tệp, sắp xếp theo thứ tự tăng dần và in ra tệp • Sử dụng sắp xếp vun đống. In ra số phép so sánh 16
- Exercise 10.3 • Viết chương trình tạo một mảng ngẫu nhiên gồm 500 phần tử. • Sắp xếp sử dụng sắp xếp chèn và sắp xếp vun đống. Tính thời gian thực hiện trong mỗi trường hợp và in ra kết quả. 17
- Gợi ý • Hàm sinh số ngẫu nhiên srand(time(NULL))và rand() • Hàm thời gian #include time_t t1,t2; time(&t1); /* Do something */ time(&t2); durationinseconds = (int) t2 –t1; 18
- Exercise 10.4 • Nhập 10 từ từ bàn phím • Với mỗi từ: – Lưu vào một mảng kí tự – Sắp xếp mảng bằng sắp xếp chèn và in kết quả ra màn hình 19
- Gợi ý • Giải thuật: – 1. Khai báo char data[10]. – 2. Đọc từ bằng hàm fgetc( ) vừa lưu vào mảng data – 3. Sắp xếp mảng data – 4. In ra màn hình bằng hàm fputc( ) 20
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: Chương 2 - Trần Minh Thái
99 p | 89 | 12
-
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 11
19 p | 5 | 1
-
Bài giảng Lập trình C cơ bản: Tuần 12
11 p | 7 | 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 | 12 | 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