Bài giảng Cấu trúc dữ liệu và giải thuật: Giải thuật sắp xếp nổi bọt, chèn, chọn - TS. Trần Ngọc Việt
lượt xem 5
download
Bài giảng Cấu trúc dữ liệu và giải thuật: Giải thuật sắp xếp nổi bọt, chèn, chọn gồm các nội dung chính sau giới thiệu về giải thuật sắp xếp nổi bọt, chèn, chọn; bài toán sắp xếp; các thuật toán sắp xếp đơn giản; các bước thuật toán; cài đặt thuật toán bubble sort. Mời các bạn cùng tham khảo!
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Cấu trúc dữ liệu và giải thuật: Giải thuật sắp xếp nổi bọt, chèn, chọn - TS. Trần Ngọc Việt
- 2 KHOA CÔNG NGHỆ THÔNG TIN
- 3 KHOA CÔNG NGHỆ THÔNG TIN
- 34 3 4 8 // a[0], a[1] là cặp nghịch thế 4 KHOA CÔNG NGHỆ THÔNG TIN
- 5 KHOA CÔNG NGHỆ THÔNG TIN
- 6 KHOA CÔNG NGHỆ THÔNG TIN
- 7 KHOA CÔNG NGHỆ THÔNG TIN
- • Cho 1 dãy các phần tử như sau: {5, 1, 6, 2, 4, 3} Lượt 1 Lượt 2 Lượt 3 5 1 6 2 4 3 1 5 2 4 3 6 1 2 4 3 5 6 1 5 6 2 4 3 1 2 5 4 3 6 1 2 3 4 5 6 1 5 2 6 4 3 1 2 4 5 3 6 1 2 3 4 5 6 1 5 2 4 6 3 1 2 4 3 5 6 1 2 3 4 5 6 1 5 2 4 3 6 1 2 4 3 5 6 1 2 3 4 5 6 8 KHOA CÔNG NGHỆ THÔNG TIN
- Input: Dãy các đối tượng (Các số chưa sắp xếp): A[0], A[1],…,A[n-1]. Output: Dãy các đối tượng đã được sắp xếp (Các số tăng dần): A[0], A[1],…,A[n-1] Actions: void BubbleSort(int a[],int n) { int i, j; for (i = 0 ; i< n-1 ; i++) for (j =i ; j > n-1 ; j ++) if(a[j]< a[j1]) // nếu sai vị trí thì đổi chỗ Swap(a[j], a[j+1]); } End 9 KHOA CÔNG NGHỆ THÔNG TIN
- #Giải thuật Nổi bọt - Bubble Sort: B.1: Gán i = 0 B.2: Gán j = 0 //danh sách có n phần tử a0,a1,a2…,an-1 B.3: Nếu A[j] > A[j + 1] thì Hoán đối chỗ giữa A[j] và A[j + 1] B.4: Nếu (j < n – i – 1): -Đúng thì j = j + 1 và quay lui bước 3 -Sai thì chuyển sang bước 5 B.5: Nếu (i < n – 1): -Đúng thì i = i + 1 và quay lui bước 2 -Sai thì dừng Kết Thúc. 10 KHOA CÔNG NGHỆ THÔNG TIN
- Bài tập 1: Áp dụng giải thuật sắp xếp Nổi bọt – Bubble Sort. Cho Mảng A = [19,13,6] +B.1: i = 0; B.2: j = 0; B.3: nếu A[j] > A[j+1] (A[0] > A[1]; 19 > 13) thì Hoán đổi giữa 19 và 13 [13,19,6]; B.4: nếu j < (n-i-1) (0 < (2-0-1)) : Đúng thì j = j+1= 0+1= 1 và quay lui B.3; +B.3: nếu A[j] > A[j+1] (A[1] > A[2]; 19 > 6) thì Hoán đổi giữa 19 và 6 [13, 6,19]; B.4: nếu j < (n-i-1) (1 < (2-0-1)): Sai thì chuyển sang B.5 ---------- #Giải thuật Nổi bọt - Bubble Sort: B.5: nếu i < (n-1) (0 < 1): Đúng thì i =i+1 = 0 +1 = 1 và quay lại B.2 B.1: Gán i = 0 +B.2: j = 0 (i= 1) ; B.2: Gán j = 0 B.3: nếu A[0] > A[1] (13 > 6) thì Hoán đổi giữa 13 và 6 B.3: Nếu A[j] > A[j + 1] thì Hoán đối chỗ giữa A[j] và A[j + 1] B.4: Nếu (j < n – i – 1): [6, 13,19] ; -Đúng thì j = j + 1 và quay lui bước 3 B.4: Nếu (j < n – i – 1) (0 < 0) : Sai thì chuyển sang B.5 -Sai thì chuyển sang bước 5 B.5: Nếu (i < n – 1) (1 < 1): Sai thì Dừng Kết thúc. B.5: Nếu (i < n – 1): Vậy mảng được sắp xếp là: -Đúng thì i = i + 1 và quay lui bước 2 [6, 13,19]. -Sai thì dừng Kết Thúc. ---------- 11 KHOA CÔNG NGHỆ THÔNG TIN
- Bài tập 2: Áp dụng giải thuật sắp xếp Nổi bọt – Bubble Sort. Thực hiện sắp xếp mảng: A = [39, 25, 16, 20] 12 KHOA CÔNG NGHỆ THÔNG TIN
- * Đánh giá độ phức tạp - thuật toán Bubble Sort void BubbleSort() { int i, j ; for (i = 2; i = i; j--) if (a[j-1] > a[j]) //hoán chuyển swap(&a[j-1], &a[j]); } 13 KHOA CÔNG NGHỆ THÔNG TIN
- 14 KHOA CÔNG NGHỆ THÔNG TIN
- -Sắp xếp chèn là một giải thuật sắp xếp dựa trên so sánh tại chỗ. -Một danh sách con luôn luôn được duy trì dưới dạng đã qua sắp xếp. Sắp xếp chèn là chèn thêm một phần tử vào danh sách con đã qua sắp xếp. -Phần tử được chèn vào vị trí thích hợp sao cho vẫn đảm bảo rằng danh sách con đó vẫn sắp xếp theo thứ tự. -Giải thuật này không thích hợp sử dụng với các tập dữ liệu lớn khi độ phức tạp trường hợp xấu nhất và trường hợp trung bình là Ο(n2) với n là số phần tử. 15 KHOA CÔNG NGHỆ THÔNG TIN
- Ví dụ: cho một mảng gồm các phần tử không có thứ tự: 14 – 33 – 27 – 10 – 35 – 19 – 42 - 44 -Giải thuật sắp xếp chèn so sánh hai phần tử đầu tiên: 14 – 33 – 27 – 10 – 35 – 19 – 42 - 44 -Giải thuật tìm ra rằng cả 14 và 33 đều đã trong thứ tự tăng dần. Bây giờ, 14 là trong danh sách con đã qua sắp xếp. 14 – 33 – 27 – 10 – 35 – 19 – 42 - 44 -Giải thuật sắp xếp chèn tiếp tục di chuyển tới phần tử kế tiếp và so sánh 33 và 27. 14 – 33 – 27 – 10 – 35 – 19 – 42 - 44 -Và thấy rằng 33 không nằm ở vị trí đúng. 14 – 33 – 27 – 10 – 35 – 19 – 42 - 44 -Giải thuật sắp xếp chèn tráo đổi vị trí của 33 và 27. Kiểm tra tất cả phần tử trong danh sách con đã sắp xếp. Thấy rằng trong danh sách con này chỉ có một phần tử 14 và 27 là lớn hơn 14. Do vậy danh sách con vẫn giữ nguyên sau khi đã tráo đổi. 14 – 27 – 33 – 10 – 35 – 19 – 42 - 44 -Danh sách con chúng ta có hai giá trị 14 và 27. Tiếp tục so sánh 33 với 10. 14 – 27 – 33 – 10 – 35 – 19 – 42 - 44 16 KHOA CÔNG NGHỆ THÔNG TIN
- -Hai giá trị này không theo thứ tự. 14 – 27 – 33 – 10 – 35 – 19 – 42 - 44 -Vì thế chúng ta tráo đổi chúng. 14 – 27 – 10 – 33 – 35 – 19 – 42 - 44 -Việc tráo đổi dẫn đến 27 và 10 không theo thứ tự. 14 – 27 – 10 – 33 – 35 – 19 – 42 - 44 -Vì thế chúng ta cũng tráo đổi chúng. 14 – 10 – 27 – 33 – 35 – 19 – 42 - 44 -Chúng ta lại thấy rằng 14 và 10 không theo thứ tự. 14 – 10 – 27 – 33 – 35 – 19 – 42 - 44 -Và chúng ta tiếp tục tráo đổi hai số này. Cuối cùng, sau vòng lặp thứ 3 chúng ta có 4 phần tử. 10 – 14 – 27 – 33 – 35 – 19 – 42 - 44 -Tiến trình trên sẽ tiếp tục diễn ra cho tới khi tất cả giá trị chưa được sắp xếp được sắp xếp hết vào trong danh sách con đã qua sắp xếp. Tiếp theo chúng ta cùng tìm hiểu khía cạnh lập trình của giải thuật sắp xếp chèn. 10 – 14 – 19 – 27 – 33 – 35 – 42 - 44 17 KHOA CÔNG NGHỆ THÔNG TIN
- Giải thuật sắp xếp chèn - Insertion Sort Bước 1: Kiểm tra nếu phần tử đầu tiên đã được sắp xếp. trả về 1 Bước 2: Lấy phần tử kế tiếp Bước 3: So sánh với tất cả phần tử trong danh sách con đã qua sắp xếp Bước 4: Dịch chuyển tất cả phần tử trong danh sách con mà lớn hơn giá trị để được sắp xếp Bước 5: Chèn giá trị đó Bước 6: Lặp lại cho tới khi danh sách được sắp xếp 18 KHOA CÔNG NGHỆ THÔNG TIN
- Bắt đầu hàm insertionSort(arr: mảng phần tử) int Position int insert for i = 1 to len(arr) thực hiện: //chọn một giá trị để chèn insert = arr[i] Position = i //xác định vị trí cho phần tử được chèn while (Position > 0 và arr[Position-1] > insert): arr[Position] = arr[Position-1] Position = Position -1 kết thúc while //chèn giá trị tại vị trí trên arr[Position] = insert kết thúc for Kết thúc hàm 19 KHOA CÔNG NGHỆ THÔNG TIN
- #thuật toán tìm kiếm sắp xếp chọn – Selection_Sort Step 1 – duyệt mảng từ vị trí thứ 0 Step 2 − tìm kiếm p.tu min trong mảng Step 3 − hoán đổi giá trị với ptu min Step 4 – tăng p.tu kế tiếp giá trị với p.tu min Step 5 − lặp lại cho đến khi mảng được sắp xếp 20 KHOA CÔNG NGHỆ THÔNG TIN
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Cấu trúc dữ liệu - Bài 1:Tổng quan về cấu trúc dữ liệu và giải thuật
47 p | 175 | 17
-
Bài giảng Cấu trúc dữ liệu 1: Chương 1 - Lương Trần Hy Hiến
7 p | 162 | 9
-
Bài giảng Cấu trúc dữ liệu và giải thuật trong C++ - Bài 8: Cấu trúc dữ liệu ngăn xếp
28 p | 77 | 9
-
Bài giảng Cấu trúc dữ liệu giải thuật: Các kiểu dữ liệu trừu tượng cơ bản - Cấu trúc dữ liệu tuyến tính
92 p | 116 | 9
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây đỏ đen - Bùi Tiến Lên
25 p | 81 | 8
-
Bài giảng Cấu trúc dữ liệu và giải thuật – Bài 17: Cấu trúc dữ liệu dạng cây
21 p | 77 | 8
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Các cấu trúc dữ liệu
193 p | 58 | 7
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 - Trần Minh Thái (2016)
62 p | 94 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 - Trần Minh Thái (Trường Đại học Hồng Bàng )
62 p | 159 | 6
-
Bài giảng Cấu trúc dữ liệu - Chương 3: Cấu trúc cây
65 p | 58 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây AA - Bùi Tiến Lên
30 p | 35 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 – Trần Minh Thái (2017)
67 p | 106 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây - Bùi Tiến Lên
68 p | 40 | 4
-
Bài giảng Cấu trúc dữ liệu: Chương 1 - ThS. Thiều Quang Trung (2018)
44 p | 43 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây AVL - Bùi Tiến Lên
38 p | 47 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 5 - Ngô Quang Thạch
24 p | 58 | 3
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 2 - Th.S Thiều Quang Trung
41 p | 68 | 3
-
Bài giảng Cấu trúc dữ liệu giải thuật: Cấu trúc dữ liệu
17 p | 50 | 2
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