1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Cấu trúc dữ liệu và giải thuật trong C++ - Bài 11: Sắp xếp

53 30 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 53
Dung lượng 1,32 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài giảng Cấu trúc dữ liệu và giải thuật trong C++ - Bài 11: Sắp xếp cung cấp cho người học các kiến thức: Các thuật toán sắp xếp nội với thời gian chạy O(n2), sắp xếp nổi bọt, minh họa thuật toán Bubble sort,... Mời các bạn cùng tham khảo.

Trang 1

Sorting 1

Bài 11: Sắp xếp (Sorting)

Trang 2

 Thuộc tính khóa được sắp xếp theo một hàm logic, ví dụ

(<=) hoặc các toán tử so sánh khác.

Bài toán

Trang 3

Sorting 3

Các thuật toán sắp xếp nội

với thời gian chạy O(n2)

Nổi bọt – Bubble sort

Chèn – Insertion sort

Chọn – Selection sort

Trang 4

Sorting 4

Sắp xếp nổi bọt – Bubble sort

Thực hiện chuyển dần các phân tử có giá trị khóa nhỏ về đầu dãy, các phần tử có khóa

lớn về cuối dãy.

Ý tưởng:

Trang 5

bị “trồi” lên phía trên phần tử nặng (hai phần tử này sẽđược đổi chỗ cho nhau) Kết quả là phần tử nhỏ nhất (nhẹnhất) sẽ được đưa lên (trồi lên) trên bề mặt (đầu mảng)rất nhanh.

 Sau mỗi lần đi chúng ta đưa được một phần tử trồi lênđúng chỗ Do vậy, sau N–1 lần đi thì tất cả các phần tửtrong mảng A sẽ có thứ tự tăng

Trang 7

if A[j].Key < A[j-1].Key then

swap(A[j-1], A[j]);

- Trong đó swap là thủ tục tráo đổi vị trí của hai phần tử

void Swap(object &a, object &b){

object tg;

tg = a; a = b; b = tg;

}

Trang 17

void BubbleSort ( int A[], int n) {

Cài đặt thuật toán Bubble sort

Trang 18

Sorting 18

Chứng minh thời gian chạy của thuật toán trong trường hợp xấu nhất là O(n2)

?

Trang 19

for j  n downto i+1 do n-i+2

if A[j].Key < A[j-1].Key then 4

Trang 20

Sorting 20

Ví dụ:

Mô tả quá trình sắp xếp của dãy số

Trang 21

Sorting 21

Sắp xếp chọn - Selection sort

Chọn phần tử có khóa nhỏ nhất trong các phần tử còn lại chuyển nó về đầu

và loại bỏ nó khỏi dãy.

•Ý tưởng:

Trang 22

Sorting 22

Sắp xếp chọn - Selection sort

 Ta chọn phần tử có giá trị nhỏ nhất trong N phần tửchưa có thứ tự này để đưa lên đầu nhóm

 Sau lần thứ nhất ta còn lại N-1 phần tử đứng ở phía saudãy A chưa có thứ tự

 Chúng ta tiếp tục chọn phần tử có giá trị nhỏ nhất trongN-1 phần tử chưa có thứ tự này để đưa lên đầu nhóm

 Làm tiếp tục cho đến cuối dãy

•Giải thuật:

Trang 23

Sorting 23

Sắp xếp chọn - Selection sort

5 4 2 3 1 Bước 1

Bước 2 Bước 3 Bước 4

Trang 34

void SelectionSort ( int A[], int n) {

Trang 35

Sorting 35

Chứng minh thời gian chạy của thuật toán trong trường hợp xấu nhất là O(n2)

?

Trang 36

Sorting 36

Thời gian chạy

for i  1 to n-1 do n+2

posmin  i ; n-1

if A[posmin].Key > A[j].Key then 3

posmin  j ; 1

swap (A[i], A[posmin]); 6(n-1)

Thời gian chạy của thuật toán

T(n) = (n+2) +4* [(n-1)+(n-2)+ +1] + 10*(n-1)

Thời gian chạy của thuật toán là O(n2)

Trang 37

Sorting 37

Ví dụ:

Mô tả quá trình sắp xếp của dãy số

Trang 38

để chèn vào vị trí thích hợp.

Trang 39

Sorting 39

Sắp xếp chèn – Insertion sort

Giải thuật:

 Đi từ đầu dãy đến cuối dãy, lần lượt lấy các phần

tử của dãy chèn vào vị trí thích hợp trong một dãy mới đã được sắp.

 Lấy phần tử thứ A[j] chèn vào dãy gồm các phần tử

từ A[1] A[j-1] sao cho ta được dãy A[1] A[j] được sắp Trong đó dãy A[1] A[j-1] là dãy đã được sắp.

Trang 41

Sorting 41

Thuật toán

Algorithm InsertionSort(Array A, n)Input: Mảng A có n phần tử

Output: Mảng A được sắp theo thứ tự tăng dần của khóa

Trang 51

}

Cài đặt thuật toán Insertion sort

Trang 52

Sorting 52

Chứng minh thời gian chạy của thuật toán trong trường hợp xấu nhất là O(n2)

?

Trang 53

Sorting 53

Ví dụ:

Mô tả quá trình sắp xếp của dãy số

Ngày đăng: 14/10/2020, 22:20

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm