Bài giảng Cấu trúc dữ liệu và giải thuật: Các thuật toán sắp xếp - Nguyễn Mạnh Hiển (P1)
Số trang: 13
Loại file: pdf
Dung lượng: 435.10 KB
Lượt xem: 16
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Bài giảng "Cấu trúc dữ liệu và giải thuật: Các thuật toán sắp xếp (P1)" có cấu trúc gồm 3 phần cung cấp cho người học các kiến thức: Sắp xếp chọn (selection sort), sắp xếp nổi bọt (bubble sort), sắp xếp chèn (insertion sort). Mời các bạn cùng tham khảo.
Nội dung trích xuất từ tài liệu:
Bài giảng Cấu trúc dữ liệu và giải thuật: Các thuật toán sắp xếp - Nguyễn Mạnh Hiển (P1)Các thuật toán sắp xếp (p1)(sorting algorithms)Nguyễn Mạnh HiểnKhoa Công nghệ thông tinhiennm@tlu.edu.vnCác thuật toán sắp xếp - phần 1• Sắp xếp chọn (selection sort)• Sắp xếp nổi bọt (bubble sort)• Sắp xếp chèn (insertion sort)Sắp xếp chọn (selection sort)• Cho dãy A gồm N phần tử a0, a1, …, aN-1• Mỗi bước xét một danh sách con chưa sắp xếp (unsorted sublist - USL)• Có N-1 bước: − Bước 1: USL = {a0, a1, …, aN-1} − Bước 2: USL = {a1, …, aN-1} −… − Bước N-1: USL = {aN-2, aN-1}Sắp xếp chọn (tiếp)• Mỗi bước: − Tìm phần tử nhỏ nhất (amin) trong USL − Đổi chỗ amin và phần tử đầu tiên của USL − Dịch chuyển biên của USL sang phải một phần tửSắp xếp chọn: Ví dụ• Ban đầu: 64, 25, 12, 22, 11• Sau bước 1: 11, 25, 12, 22, 64• Sau bước 2: 11, 12, 25, 22, 64• Sau bước 3: 11, 12, 22, 25, 64• Sau bước 4: 11, 12, 22, 25, 64 (danh sách con chưa sắp xếp được gạch chân)Cài đặt và phân tích sắp xếp chọn• Viết hàm selectionSort()• Chứng minh thời gian chạy là O(N2)Sắp xếp nổi bọt (bubble sort)• Mỗi bước: − So sánh hai phần tử kề nhau − Đổi chỗ nếu chúng chưa đúng thứ tự• Sau mỗi bước, phần tử lớn nhất sẽ được đặt (“nổi bọt”) xuống cuối dãy• Thời gian chạy: O(N2)Sắp xếp nổi bọt: Ví dụ• Ban đầu: 2, 3, 1, 15• Sau bước 1: 2, 1, 3, 15• Sau bước 2: 1, 2, 3, 15• Sau bước 3: 1, 2, 3, 15 (danh sách con chưa sắp xếp được gạch chân)Sắp xếp nổi bọt: Cài đặtfor (i = 0; i < N-1; i++){ for (j = 0; j < N-1-i; j++) if (a[j+1] < a[j]) { tmp = a[j]; a[j] = a[j+1]; a[j+1] = tmp; }}• Trong trường hợp tốt nhất (dãy đã sắp xếp rồi), sắp xếp nổi bọt chỉ nên mất thời gian O(N) hãy tối ưu hóa cài đặt bên trên!Sắp xếp chèn (insertion sort)• Có N-1 bước ứng với p = 1, 2, …, N-1• Ở bước p: (khi bắt đầu bước p, các vị trí 0, …, p-1 đã được sắp xếp rồi) − Xác định vị trí phù hợp trong các vị trí 0, …, p-1 cho phần tử ở vị trí p (ap) − Chèn ap vào vị trí đã xác định, vì vậy các vị trí từ 0 đến p được sắp xếpSắp xếp chèn: Ví dụSắp xếp chèn: Cài đặtPhân tích sắp xếp chèn• Trường hợp tốt nhất: O(N)• Trường hợp tồi nhất: O(N2)
Nội dung trích xuất từ tài liệu:
Bài giảng Cấu trúc dữ liệu và giải thuật: Các thuật toán sắp xếp - Nguyễn Mạnh Hiển (P1)Các thuật toán sắp xếp (p1)(sorting algorithms)Nguyễn Mạnh HiểnKhoa Công nghệ thông tinhiennm@tlu.edu.vnCác thuật toán sắp xếp - phần 1• Sắp xếp chọn (selection sort)• Sắp xếp nổi bọt (bubble sort)• Sắp xếp chèn (insertion sort)Sắp xếp chọn (selection sort)• Cho dãy A gồm N phần tử a0, a1, …, aN-1• Mỗi bước xét một danh sách con chưa sắp xếp (unsorted sublist - USL)• Có N-1 bước: − Bước 1: USL = {a0, a1, …, aN-1} − Bước 2: USL = {a1, …, aN-1} −… − Bước N-1: USL = {aN-2, aN-1}Sắp xếp chọn (tiếp)• Mỗi bước: − Tìm phần tử nhỏ nhất (amin) trong USL − Đổi chỗ amin và phần tử đầu tiên của USL − Dịch chuyển biên của USL sang phải một phần tửSắp xếp chọn: Ví dụ• Ban đầu: 64, 25, 12, 22, 11• Sau bước 1: 11, 25, 12, 22, 64• Sau bước 2: 11, 12, 25, 22, 64• Sau bước 3: 11, 12, 22, 25, 64• Sau bước 4: 11, 12, 22, 25, 64 (danh sách con chưa sắp xếp được gạch chân)Cài đặt và phân tích sắp xếp chọn• Viết hàm selectionSort()• Chứng minh thời gian chạy là O(N2)Sắp xếp nổi bọt (bubble sort)• Mỗi bước: − So sánh hai phần tử kề nhau − Đổi chỗ nếu chúng chưa đúng thứ tự• Sau mỗi bước, phần tử lớn nhất sẽ được đặt (“nổi bọt”) xuống cuối dãy• Thời gian chạy: O(N2)Sắp xếp nổi bọt: Ví dụ• Ban đầu: 2, 3, 1, 15• Sau bước 1: 2, 1, 3, 15• Sau bước 2: 1, 2, 3, 15• Sau bước 3: 1, 2, 3, 15 (danh sách con chưa sắp xếp được gạch chân)Sắp xếp nổi bọt: Cài đặtfor (i = 0; i < N-1; i++){ for (j = 0; j < N-1-i; j++) if (a[j+1] < a[j]) { tmp = a[j]; a[j] = a[j+1]; a[j+1] = tmp; }}• Trong trường hợp tốt nhất (dãy đã sắp xếp rồi), sắp xếp nổi bọt chỉ nên mất thời gian O(N) hãy tối ưu hóa cài đặt bên trên!Sắp xếp chèn (insertion sort)• Có N-1 bước ứng với p = 1, 2, …, N-1• Ở bước p: (khi bắt đầu bước p, các vị trí 0, …, p-1 đã được sắp xếp rồi) − Xác định vị trí phù hợp trong các vị trí 0, …, p-1 cho phần tử ở vị trí p (ap) − Chèn ap vào vị trí đã xác định, vì vậy các vị trí từ 0 đến p được sắp xếpSắp xếp chèn: Ví dụSắp xếp chèn: Cài đặtPhân tích sắp xếp chèn• Trường hợp tốt nhất: O(N)• Trường hợp tồi nhất: O(N2)
Tìm kiếm theo từ khóa liên quan:
Cấu trúc dữ liệu và giải thuật Cấu trúc dữ liệu Bài giảng Cấu trúc dữ liệu Cơ sở dữ liệu Các thuật toán sắp xếp Sắp xếp chọn Sắp xếp nổi bọtGợi ý tài liệu liên quan:
-
62 trang 389 3 0
-
Đề thi kết thúc học phần học kì 2 môn Cơ sở dữ liệu năm 2019-2020 có đáp án - Trường ĐH Đồng Tháp
5 trang 371 6 0 -
Đề cương chi tiết học phần Cấu trúc dữ liệu và giải thuật (Data structures and algorithms)
10 trang 301 0 0 -
Giáo trình Cơ sở dữ liệu: Phần 2 - TS. Nguyễn Hoàng Sơn
158 trang 281 0 0 -
13 trang 272 0 0
-
Phân tích thiết kế hệ thống - Biểu đồ trạng thái
20 trang 266 0 0 -
Tài liệu học tập Tin học văn phòng: Phần 2 - Vũ Thu Uyên
85 trang 237 1 0 -
Đề cương chi tiết học phần Quản trị cơ sở dữ liệu (Database Management Systems - DBMS)
14 trang 235 0 0 -
8 trang 184 0 0
-
Giáo trình Cơ sở dữ liệu: Phần 2 - Đại học Kinh tế TP. HCM
115 trang 172 0 0