Professional Documents
Culture Documents
Ngaymai
Ngaymai
Stronig
Algorithms
mAlisgroth
MEET OUR TEAM
OUR
TEAM
Cao Lộc Quốc Huy Văn Khải
Selection Sort
SORT
Quick Sort
SORT
Heap Sort
SORT
Phân tích
SORT
Kết thúc
Selection Sort
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
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
Độ Phức Tạp
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
ak <= x ak = x ak >= x
QUICK SORT
1. Ý TƯỞNG THUẬT TOÁN
Để 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
54 8 14 6 5 1 99 14
QUICK SORT
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
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
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
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
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
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
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
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.
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
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
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