Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 112

Sorting

Stronig
Algorithms
mAlisgroth
MEET OUR TEAM
OUR
TEAM
Cao Lộc Quốc Huy Văn Khải

Minh Triết Minh Hiếu Phước Sang Thái Công


Sắp xếp (Sort)
• Sắp xếp được hiểu đơn giản là xếp
theo trình tự sao cho hợp lí

• Trong KHMT và Toán học, định nghĩa


Thuật toán sắp xếp được ra đời

• Thuật toán sắp xếp là một thuật toán


 sắp xếp các phần tử của một danh
sách (hoặc một mảng) theo thứ tự
(tăng hoặc giảm)
SORT
SORT

Giới thiệu về sort


SORT

Selection Sort
SORT

Quick Sort
SORT

Heap Sort
SORT

Phân tích
SORT

Kết thúc
Selection Sort

Giới thiệu ý tưởng thuật toán

Mảng A
12
MAX MAX
72 MAX
44 51
MAX 57
MAX
0 1 2 3 4

Mảng B
1 2 4 5 7
0 1 2 3 4

MAX= giá trị lớn nhất trong mảng + 1


Selection Sort

Giới thiệu ý tưởng thuật toán


• Nhược điểm: Cần thêm một bộ nhớ tạm thời B. Mảng A càng lớn thì bộ nhớ tạm thời này cũng càng lớn.
Vậy nên đây không phải là thuật toán gọn gàng để sắp xếp.
• Chúng ta có thể làm một thứ tương tự như vậy mà ở mỗi bước chúng ta cũng sẽ chọn ra số nhỏ nhất nhưng
không cần đến một bộ nhớ tạm thời B.
Selection Sort

Giới thiệu ý tưởng thuật toán


• Giả sử đối với tư duy sắp xếp một mảng tăng dần.
• Ý tưởng của thuật toán sắp xếp chọn như sau:
Selection Sort

Giới thiệu ý tưởng thuật toán


• Ý tưởng chung: Thuật toán sắp xếp chọn sẽ sắp xếp một mảng bằng cách đi tìm phần tử có giá trị nhỏ nhất trong
mảng chưa được sắp xếp.
B1: Chọn phần tử nhỏ nhất trong mảng gồm N phần tử trong dãy hiện hành ban đầu.
B2: Đổi chỗ phần tử này cho phần tử ở đầu đoạn chưa được sắp xếp.
Lúc này, thuật toán sẽ chia mảng thành 2 mảng con:
- Mảng con đã được sắp xếp [Tính từ vị trí phần tử vừa được đổi chỗ với phần tử nhỏ nhất vừa tìm được về phía bên
trái].
- Mảng con chưa được sắp xếp [Tính từ vị trí phần tử vừa được đổi chỗ với phần tử nhỏ nhất vừa tìm được về phía
bên phải]. Lúc này mảng ta xét chỉ còn n - 1 phần tử.
B3: Xét mảng con chưa được sắp xếp, ta lặp lại từng bước của thuật toán, đến khi dãy hiện hành chỉ còn một
phần tử.
Lưu ý: Phần tử nhỏ nhất ở mảng con chưa được sắp xếp sẽ được di chuyển về vị trí tiếp theo của đoạn đã
được sắp xếp.
Selection Sort

Minh họa thực tế

6 4 3 1 5
0 1 2 3 4

B1: Tìm phần tử nhỏ nhất trong mảng và đổi chỗ với phần tử có trị số đầu tiên (0) trong mảng
B2: Tìm phần tử nhỏ nhất từ trị số 1 đến trị số 4 và đổi chỗ nó với phần tử có trị số đầu tiên (1)
trong mảng con từ 1 đến 4
B3: Tìm phần tử nhỏ nhất từ trị số 2 đến trị số 4 và đổi chỗ nó với phần tử có trị số đầu tiên (2)
trong mảng con từ 2 đến 4
B4 : Tìm phần tử nhỏ nhất từ trị số 3 đến trị số 4 và đổi chỗ nó với phần tử có trị số đầu tiên (3)
trong mảng con từ 3 đến 4
Selection Sort

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


• Cài đặt thuật toán bằng ngôn ngữ C++ : • Dữ liệu đầu vào của bài toán:

• Sau khi thực hiện, chương trả sẽ trả về:

• Bổ sung về cài đặt hàm swap() :


Selection Sort

Độ Phức Tạp

Độ phức tạp của thuật toán Selection Sort

Trường hợp Xấu nhất Trung bình Tốt nhất

Độ phức tạp O(n2) O(n2) O(n2)


QUICK SORT

1. Ý TƯỞNG THUẬT TOÁN


QUICK SORT
1. Ý TƯỞNG THUẬT TOÁN

o Giải thuật QuickSort sắp xếp dãy a1, a2, a3 …, aN sẽ phân hoạch dãy ban đầu
thành 3 phần:
• Phần 1: Gồm các phần tử có giá trị bé hơn x
• Phần 2: Gồm các phần tử có giá trị bằng x
• Phần 3: Gồm các phần tử có giá trị lớn hơn x

Với x là giá trị của một phần tử tùy ý trong dãy ban đầu cần sắp xếp.
QUICK SORT
1. Ý TƯỞNG THUẬT TOÁN

o Sau khi thực hiện phân hoạch dãy số ban đầu, dãy số sẽ được phân hoạch
thành 3 đoạn:
1. ak <= x , với k = 1, 2…j
2. ak = x, với k = j + 1 … i - 1
2. ak >= x, với k = i … n

ak <= x ak = x ak >= x
QUICK SORT
1. Ý TƯỞNG THUẬT TOÁN

 Đoạn thứ 2 đã có thứ tự sắp xếp


 Nếu đoạn thứ 1 và đoạn thứ 3 chỉ có 1 phần tử
→ Khi đó dãy số ban đầu đã được sắp xếp

ak <= x ak = x ak >= x
QUICK SORT
1. Ý TƯỞNG THUẬT TOÁN

 Đoạn thứ 2 đã có thứ tự sắp xếp


 Nếu đoạn thứ 1 và đoạn thứ 3 có số phần tử > 1
→ Sắp xếp đoạn 1 và đoạn 3

 Để sắp xếp đoạn 1 và đoạn 3, tiến hành phân hoạch đoạn 1 và đoạn 3 giống
như cách phân hoạch ban đầu.
ak <= x ak = x ak >= x
QUICK SORT
2. GIẢI THUẬT

Bước 1 : Chọn tùy ý một phần tử a[k] trong dãy là giá trị mốc ( l ≤ k ≤ r):
x = a[k]; i = l; j = r;
Bước 2 : Phát hiện và hiệu chỉnh cặp phần tử a[i], a[j] nằm sai chỗ:
Bước 2a: Trong khi (a[i] < x) i++;
Bước 2b: Trong khi (a[j] > x) j--;
Bước 2c: Nếu i< j Doicho(a[i],a[j]);
Bước 3 : Nếu i < j: Lặp lại Bước 2.
Ngược lại: Dừng
QUICK SORT
3. MINH HỌA THUẬT TOÁN

Cho dãy số a có 8 phần tử:

54 8 14 6 5 1 99 14
QUICK SORT

Phân hoạch đoạn l = 0, r = 7

54 8 14 6 5 1 99 14

l=0 r=7
QUICK SORT

Phân hoạch đoạn l = 0, r = 7 x = a[(l + r)/2)] = a[3] = 6

54 8 14 6 5 1 99 14

l=0 r=7
QUICK SORT

54 8 14 6 5 1 99 14

l=0 r=7
QUICK SORT
i=0 j=7

54 8 14 6 5 1 99 14

l=0 r=7
QUICK SORT
i=0 j=6

54 8 14 6 5 1 99 14

l=0 r=7
QUICK SORT
i=0 j=5

54 8 14 6 5 1 99 14

l=0 r=7
QUICK SORT
i=0 j=5

54 8 14 6 5 1 99 14

l=0 r=7
QUICK SORT

54 8 14 6 5 1 99 14

l=0 r=7
QUICK SORT

1 8 14 6 5 54 99 14

l=0 r=7
QUICK SORT

1 8 14 6 5 54 99 14

l=0 r=7
QUICK SORT
i=1 j=4

1 8 14 6 5 54 99 14

l=0 r=7
QUICK SORT
i=1 j=4

1 8 14 6 5 54 99 14

l=0 r=7
QUICK SORT
i=1 j=4

1 8 14 6 5 54 99 14

l=0 r=7
QUICK SORT

1 8 14 6 5 54 99 14

l=0 r=7
QUICK SORT

1 5 14 6 8 54 99 14

l=0 r=7
QUICK SORT

1 5 14 6 8 54 99 14

l=0 r=7
QUICK SORT
i=1 j=4

1 5 14 6 8 54 99 14

l=0 r=7
QUICK SORT
i=2 j=3

1 5 14 6 8 54 99 14

l=0 r=7
QUICK SORT
i=2 j=3

1 5 14 6 8 54 99 14

l=0 r=7
QUICK SORT
i=2 j=3

1 5 14 6 8 54 99 14

l=0 r=7
QUICK SORT

1 5 14 6 8 54 99 14

l=0 r=7
QUICK SORT

1 5 6 14 8 54 99 14

l=0 r=7
QUICK SORT

1 5 6 14 8 54 99 14

l=0 r=7
QUICK SORT
j=2 i=3

1 5 6 14 8 54 99 14

l=0 r=7
Tiếp theo:
Phân hoạch đoạn [l; j] ([0; 2])
Phân hoạch đoạn [i; r] ([3; 7])
QUICK SORT

Phân hoạch đoạn l = 0, r = 2 x = a[(l + r)/2)] = a[1] = 5

1 5 6 14 8 54 99 14

l=0 r=2
QUICK SORT
i=0 j=2

1 5 6 14 8 54 99 14

l=0 r=2
QUICK SORT
i=0 j=2

1 5 6 14 8 54 99 14

l=0 r=2
QUICK SORT
1 j=
i= 1

1 5 6 14 8 54 99 14

l=0 r=2
QUICK SORT
0 j=
i= 2

1 5 6 14 8 54 99 14

l=0 r=2
Tiếp theo:
Phân hoạch đoạn [i; r] ([3; 7])
QUICK SORT

Phân hoạch đoạn l = 3, r = 7 x = a[(l + r)/2)] = a[5] = 54

1 5 6 14 8 54 99 14

l=3 r=7
QUICK SORT
i=3 j=7

1 5 6 14 8 54 99 14

l=3 r=7
QUICK SORT
i=4 j=7

1 5 6 14 8 54 99 14

l=3 r=7
QUICK SORT
i=5 j=7

1 5 6 14 8 54 99 14

l=3 r=7
QUICK SORT
i=5 j=7

1 5 6 14 8 54 99 14

l=3 r=7
QUICK SORT

1 5 6 14 8 54 99 14

l=3 r=7
QUICK SORT

1 5 6 14 8 14 99 54

l=3 r=7
QUICK SORT
i=5 j=7

1 5 6 14 8 14 99 54

l=3 r=7
QUICK SORT
j=
i =6 6

1 5 6 14 8 14 99 54

l=3 r=7
Tiếp theo:
Phân hoạch đoạn [l; j] ([3; 6])
Phân hoạch đoạn [i; r] ([6; 7])
QUICK SORT

Phân hoạch đoạn l = 3, r = 6 x = a[(l + r)/2)] = a[4] = 8

1 5 6 14 8 14 99 54

l=3 r=6
QUICK SORT
i=3 j=6

1 5 6 14 8 14 99 54

l=3 r=6
QUICK SORT
i=3 j=5

1 5 6 14 8 14 99 54

l=3 r=6
QUICK SORT
i=3 j=4

1 5 6 14 8 14 99 54

l=3 r=6
QUICK SORT
i=3 j=4

1 5 6 14 8 14 99 54

l=3 r=6
QUICK SORT

1 5 6 14 8 14 99 54

l=3 r=6
QUICK SORT

1 5 6 8 14 14 99 54

l=3 r=6
QUICK SORT
i=3 j=4

1 5 6 8 14 14 99 54

l=3 r=6
QUICK SORT
j=3 i=4

1 5 6 8 14 14 99 54

l=3 r=6
Tiếp theo:
Phân hoạch đoạn [i; r] ([6; 7])
QUICK SORT

Phân hoạch đoạn l = 6, r = 7 x = a[(l + r)/2)] = a[6] = 99

1 5 6 8 14 14 99 54

l=6 r=7
QUICK SORT
i=6 j=7

1 5 6 8 14 14 99 54

l=6 r=7
QUICK SORT
i=6 j=7

1 5 6 8 14 14 99 54

l=6 r=7
QUICK SORT

1 5 6 8 14 14 99 54

l=6 r=7
QUICK SORT

1 5 6 8 14 14 54 99

l=6 r=7
QUICK SORT

1 5 6 8 14 14 54 99

Hoàn thành việc sắp xếp dãy a ban đầu


QUICK SORT

4. Code minh họa thuật toán


Code minh họa cho thuật toán Quick Sort
Viết hàm Quick Sort dựa vào giải
thuật
Chọn phần
tử ở giữa
làm giá trị
mốc

Phát hiện và chỉnh


sửa các cặp phần
tử a[i], a[j] nằm sai
chỗ

Gọi đệ quy sắp


xếp các đoạn
con 1 và 3
Code minh họa cho thuật toán Quick Sort

Viết hàm main

Có thể viết riêng các hàm Nhập, Xuất thay vì tích hợp chung với hàm main.
Code minh họa cho thuật toán Quick Sort (hoàn chỉnh)
QUICK SORT

5. Độ Phức Tạp
Độ phức tạp của thuật toán Quick Sort

Trường hợp Xấu nhất Trung bình Tốt nhất

Độ phức tạp O(n2) O(n*log n) O(n*log n)


Heap Sort
Heap Sort

I. Giới thiệu thuật toán Heap Sort


 Heap Sort có ưu thế hơn Selection Sort ở việc tận dụng được kết
quả ở bước i – 1 trước đó.
 Để có được ưu thế này chúng ta khi cài Heap Sort cần thao tác
dựa trên cây nhị phân.
Heap Sort

I. Giới thiệu thuật toán Heap Sort

 Heap sort là một kỹ thuật sắp xếp dựa trên cấu trúc dữ liệu Binary Heap.

 Chúng ta tìm phần tử lớn nhất và đặt phần tử lớn nhất ở cuối. Chúng ta
lặp lại quá trình tương tự cho các phần tử còn lại.
Heap Sort
I. Ý tưởng thuật toán Heap Sort
 Bước 1 : Xây dựng thành heap dựa trên dãy số có trước.
 Bước 2 : Sắp xếp dựa trên heap có sẵn :

o Bước 2.1 : Đưa phần tử lớn nhất về vị trí đứng ở cuối dãy

o Bước 2.2 : Loại bỏ phần tử lớn nhất ra khỏi heap: r= r – 1. Hiệu chỉnh phần
còn lại của dãy từ a1, a2, …, ar thành một heap.

o Bước 2.3 : Nếu r > 1 : lặp lại bước 2.2 .

o Bước 2.4 : Dừng chương trình


Xây dựng heap
0 1 2 3 4 5 6 7 8
5 7 1 8 6 9 4 2 3
5

7 1

Node : I
8 6 9 4 Left node : 2I + 1
Right node : 2I + 2
2 3
Xây dựng Max Heap
0 1 2 3 4 5 6 7 8
5 5 7 1 8 6 9 4 2 3

7 1

Node cha > Node con


8 6 9 4

2 3
Heap Sort
0 1 2 3 4 5 6 7 8
9 8 5 7 6 1 4 2 3
9

8 5

7 6 1 4

2 3
Heap Sort
0 1 2 3 4 5 6 7 8
8 7 5 3 6 1 4 2 9
8

7 5

3 6 1 4

2 9
Heap Sort
0 1 2 3 4 5 6 7 8
7 6 5 3 2 1 4 8 9
7

6 5

3 2 1 4

8 9
Heap Sort
0 1 2 3 4 5 6 7 8
6 4 5 3 2 1 7 8 9
6

4 5

3 2 1 7

8 9
Heap Sort
0 1 2 3 4 5 6 7 8
5 4 1 3 2 6 7 8 9
5

4 1

3 2 6 7

8 9
Heap Sort
0 1 2 3 4 5 6 7 8
4 3 1 2 5 6 7 8 9
4

3 1

2 5 6 7

8 9
Heap Sort
0 1 2 3 4 5 6 7 8
3 2 1 4 5 6 7 8 9
3

2 1

4 5 6 7

8 9
Heap Sort
0 1 2 3 4 5 6 7 8
2 1 3 4 5 6 7 8 9
2

1 3

4 5 6 7

8 9
Heap Sort

Cập nhật heap để tạo


thành max heap

Xây dựng max heap


dựa trên cây ban đầu
Heap Sort

Thuật toán heap sort


Heap Sort

Độ phức tạp của thuật toán Heap Sort

Trường hợp Xấu nhất Trung bình Tốt nhất

Độ phức tạp O(nlogn) O(nlogn) O(n)


Phân tích
GIA THANK
TÁC
M
YOU!
TAM GIÁC

ĐÁNH NHỐT ĐỐT NHÁNH THIÊU


CÀNH
GIA THANK
TÁC
M
YOU!

ĐÁNH NHỐT ĐỐT NHÁNH THIÊU


CÀNH
THANK
YOU!
ĐÁNH TÁC
GIA
TAM GIÁC

NHỐT
M
ĐỐT NHÁNH THIÊU
CÀNH
THANK
YOU!
ĐÁNH TÁC
GIA
TAM GIÁC

NHỐT
M
ĐỐT NHÁNH THIÊU
CÀNH
THANK
YOU!
GIA ĐÁNH
TAM GIÁC

M NHỐT

ĐỐT NHÁNH THIÊU


CÀNH
THANK
YOU!
ĐỐT THIÊU
CÀNH NHÁNH
THANK
YOU!
ĐỐT THIÊU
CÀNH NHÁNH
THANK
YOU!
ĐỐT THIÊU
CÀNH NHÁNH
THANK
YOU!
ĐỐT THANK
YOU NHÁNH
THANK YOU

You might also like