KHOA CÔNG NGHỆ THÔNG TIN
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT (Data Structures And Algorithms)
BÀI 3: CÁC GIẢI THUẬT SẮP XẾP
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com
GIỚI THIỆU ▪ Sắp xếp là gì? Trong thực tế chúng ta đã từng thấy những thứ gì được sắp xếp? Giá trị của việc sắp xếp mang lại là gì? - Danh sách học sinh trong lớp - Danh sách xếp hạng điểm người chơi - Các sản phẩm trên thương mại điện tử - Tra cứu từ điển
▪ Trong phần này các thuật toán sắp xếp sẽ dùng các số
nguyên để biểu diễn.
2
KHOA CÔNG NGHỆ THÔNG TIN
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com
BÀI TOÁN SẮP XẾP • Cho danh sách có n phần tử a0, a1, a2…, an-1. • Sắp xếp là quá trình xử lý các phần tử trong danh sách để đặt chúng theo một thứ tự thỏa mãn một số tiêu chuẩn nào đó dựa trên thông tin lưu tại mỗi phần tử, như: - Sắp xếp danh sách lớp học tăng theo điểm trung bình. - Sắp xếp danh sách sinh viên tăng theo tên.
• Để đơn giản trong việc trình bày giải thuật ta dùng mảng
1 chiều a để lưu danh sách trên trong bộ nhớ chính.
3
KHOA CÔNG NGHỆ THÔNG TIN
BÀI TOÁN SẮP XẾP (tt) a: là dãy các phần tử dữ liệu Để sắp xếp dãy a theo thứ tự (giả sử theo thứ tự tăng), ta tiến hành triệt tiêu tất cả các nghịch thế trong a.
▪Nghịch thế:
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com
a[0], a[1] là cặp nghịch thế
•Cho dãy có n phần tử a0, a1,…,an-1
•Nếu iaj
4
3
8
34
Đánh giá độ phức tạp của giải thuật, ta tính
Css: Số lượng phép so sánh cần thực hiện CHV: Số lượng phép hoán vị cần thực hiện
4
KHOA CÔNG NGHỆ THÔNG TIN
CÁC THUẬT TOÁN SẮP XẾP ĐƠN GIẢN ▪ Các thuật toán sắp xếp được trình bày ở đây gồm:
- Thuật toán sắp xếp kiểu sủi bọt (Bubble Sort)
- Thuật toán sắp xếp kiểu lựa chọn (Selection Sort)
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com
- Thuật toán sắp xếp kiểu chèn (Insertion Sort)
5
KHOA CÔNG NGHỆ THÔNG TIN
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com
01. BUBBLE SORT ▪ Xuất phát từ đầu dãy, đổi chỗ các cặp phần tử kế cận để đưa phần tử nhỏ hơn trong cặp phần tử đó về vị trí đứng đầu dãy hiện hành, sau đó sẽ không xét đến nó ở bước tiếp theo, do vậy ở lần xử lý thứ i sẽ có vị trí đầu dãy là i.
▪ Lặp lại xử lý trên cho đến khi không còn cặp phần tử
nào để xét.
6
KHOA CÔNG NGHỆ THÔNG TIN
CÁC BƯỚC THUẬT TOÁN Bước 1 : i = 0; // lần xử lý đầu tiên Bước 2 : j = 0;//Duyệt từ đầu dãy về cuối vị trí N-1
Trong khi (j < N-1) thực hiện:
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com
Nếu a[j]>a[j+1]
Doicho(a[j],a[j+1]);
j = j+1;
Bước 3 : i = i+1; // lần xử lý kế tiếp Nếu i >=N-1: Hết dãy. Dừng Ngược lại : Lặp lại Bước 2.
7
KHOA CÔNG NGHỆ THÔNG TIN
MINH HỌA THUẬT TOÁN • Cho 1 dãy các phần tử như sau: {5, 1, 6, 2, 4, 3}
Lượt 2(i=1) Lượt 1(i=0) Lượt 3(i=2)
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com
1 5 2 4 3 6 5 1 6 2 4 3 1 2 4 3 5 6
1 2 5 4 3 6 1 2 3 4 5 6 1 5 6 2 4 3
1 2 4 5 3 6 1 2 3 4 5 6 1 5 2 6 4 3
1 2 3 4 5 6 1 2 4 3 5 6 1 5 2 4 6 3
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
CÀI ĐẶT THUẬT TOÁN BUBBLE SORT Input: Dãy các đối tượng (Các số): Arr[0], Arr[1],…,Arr[n-1]. Output: Dãy các đối tượng đã được sắp xếp (Các số): Arr[0], Arr[1],…,Arr[n-1] Actions:
void BubbleSort(ref a[],int n)
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com
{
int i, j;
for (i = 0 ; i
for (j =0 ; j < n-1 ; j ++)
if(a[j]> a[j+1])// nếu sai vị trí thì đổi chỗ
Swap(a[j], a[j+1]);
9
}
End
KHOA CÔNG NGHỆ THÔNG TIN
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
#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
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
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
B.5: nếu i < (n-1) (0 < 1): Đúng thì i =i+1 = 0 +1 = 1 và quay lại B.2
11
KHOA CÔNG NGHỆ THÔNG TIN
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
+B.2: j = 0 (i= 1) ;
B.3: nếu A[0] > A[1] (13 > 6) thì Hoán đổi giữa 13 và 6
[6, 13,19] ;
B.4: Nếu (j < n – i – 1) (0 < 0) : Sai thì chuyển sang B.5
B.5: Nếu (i < n – 1) (1 < 1): Sai thì Dừng Kết thúc.
Vậy mảng được sắp xếp là:
[6, 13,19].
12
KHOA CÔNG NGHỆ THÔNG TIN
Kiểm tra 30’: Á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]
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
13
KHOA CÔNG NGHỆ THÔNG TIN
ĐÁNH GIÁ THUẬT
TOÁN
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
14
KHOA CÔNG NGHỆ THÔNG TIN
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
Đánh giá độ phức tạp - thuật toán Bubble Sort
void BubbleSort()
{
int i, j ;
for (i = 2; i <= n; i++)
for ( j = n; j >= i; j--)
if (a[j-1] > a[j]) //hoán chuyển
swap(&a[j-1], &a[j]);
}
15
KHOA CÔNG NGHỆ THÔNG TIN
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
02. SELECTION SORT
• Thuật toán thực hiện sắp xếp dãy các đối tượng bằng cách lặp
kiểu chọn. Thuật toán thực hiện sắp xếp dãy các đối tượng
bằng cách lặp lại việc tìm kiếm phần tử có giá trị nhỏ nhất từ
thành phần chưa được sắp xếp trong mảng và đặt nó vào vị trí
đầu tiên của dãy. Trên dãy các đối tượng ban đầu, thuật toán
luôn duy trì hai dãy con:
- Dãy con đã được sắp xếp: là các phần tử bên trái của dãy.
- Dãy con chưa được sắp xếp là các phần tử bên phải của
dãy.
• Quá trình lặp sẽ kết thúc khi dãy con chưa được sắp xếp chỉ
còn lại đúng một phần tử
16
KHOA CÔNG NGHỆ THÔNG TIN
CÁC BƯỚC CỦA THUẬT
TOÁN
Bước 1: i = 0;
Bước 2: Tìm phần tử a[min] nhỏ nhất trong
dãy hiện hành từ a[i] đến a[N]
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
Bước 3 : Đổi chỗ a[min] và a[i]
Bước 4 : Nếu i < N-1 thì
i = i+1; Lặp lại Bước 2;
Ngược lại: Dừng.
17
KHOA CÔNG NGHỆ THÔNG TIN
MINH HỌA THUẬT
TOÁN
• Cho 1 dãy phần tử các giá trị như sau: { 15,2,8,7,3,6,9,17}
I = 0 15 2 8 7 3 6 9 17
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
I = 1 2 15 8 7 3 6 9 17
I = 2 2 3 8 7 15 6 9 17
I = 3 2 3 6 7 15 8 9 17
I = 4 2 3 6 7 15 8 9 17
I = 5 2 3 6 7 8 15 9 17
I = 6 2 3 6 7 8 9 15 17
18
KHOA CÔNG NGHỆ THÔNG TIN
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
#minh họa – giải thuật sắp xếp chọn
arr[] = 65 – 27 – 16 – 24 - 3
// Tìm phần tử nhỏ nhất trong trong arr[0...4]
// và đổi chỗ nó với phần tử đầu tiên
[3] – 27 – 16 – 24 – 65
// Tìm phần tử nhỏ nhất trong trong arr[1...4]
// và đổi chỗ nó với phần tử đầu tiên của arr[1...4]
3 - [16] – 27 – 24 - 65
// Tìm phần tử nhỏ nhất trong trong arr[2...4]
// và đổi chỗ nó với phần tử đầu tiên của arr[2...4]
3 – 16 - [24] – 27 – 65
// Tìm phần tử nhỏ nhất trong trong arr[3...4]
// và đổi chỗ nó với phần tử đầu tiên của arr[3...4]
3 – 16 – 24 - [27] – 65.
19
KHOA CÔNG NGHỆ THÔNG TIN
#Bài tập:
Thực hiện tính toán từng bước theo giải thuật sắp xếp chọn – Selection
Sort.
Cho mảng: A = [30, 65, 100, 20, 40, 75]
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
20
KHOA CÔNG NGHỆ THÔNG TIN
CÀI ĐẶT THUẬT
TOÁN
Input: Dãy các đối tượng (Các số): Arr[0], Arr[1],…,Arr[n-1].
Output: Dãy các đối tượng đã được sắp xếp (Các số): Arr[0], Arr[1],…,Arr[n-1]
Actions:
void SelectionSort(ref a[],int n )
{
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
int min,i,j; // chỉ số phần tử nhỏ nhất trong dãy hiện hành
for (i=0; i
min = i;
for(j = i+1; j
min = j; // lưu vtrí phần tử hiện nhỏ nhất
Swap(a[min],a[i]);
}
}
End
21
KHOA CÔNG NGHỆ THÔNG TIN
ĐÁNH GIÁ GIẢI
THUẬT
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
22
KHOA CÔNG NGHỆ THÔNG TIN
03. INSERTION SORT
• Giả sử có một dãy a0 , a1 ,... ,an-1 trong đó i phần tử
đầu tiên a0 , a1 ,... ,ai-1 đã có thứ tự.
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
• Tìm cách chèn phần tử ai vào vị trí thích hợp của
đoạn đã được sắp để có dãy mới a0 , a1,... ,ai trở
nên có thứ tự. Vị trí này chính là vị trí giữa hai
phần tử ak-1 và ak thỏa ak-1 < ai < ak (1≤k≤i).
23
KHOA CÔNG NGHỆ THÔNG TIN
CÁC BƯỚC CỦA THUẬT
TOÁN
Bước 1: i = 1; //giả sử có đoạn a[0] đã được sắp
Bước 2: x = a[i]; Tìm vị trí pos thích hợp trong đoạn a[0]
đến a[i-1] để chèn a[i] vào
sang
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
Bước 3: Dời chỗ các phần tử từ a[pos] đến a[i-1]
phải 1 vị trí để dành chổ cho a[i]
Bước 4: a[pos] = x; //có đoạn a[0]..a[i] đã được sắp
Bước 5: i = i+1;
Nếu i < n: Lặp lại Bước 2
Ngược lại: Dừng
24
KHOA CÔNG NGHỆ THÔNG TIN
MINH HỌA THUẬT
TOÁN
• Cho 1 dãy phần tử các giá trị như sau: { 3, 6, 1, 8, 4, 5 }
3 6 1 8 4 5
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
3 6 1 8 4 5
1 3 6 8 4 5
1 3 6 8 4 5
1 3 4 6 8 5
1 3 4 5 6 8
25
KHOA CÔNG NGHỆ THÔNG TIN
CÀI ĐẶT THUẬT
TOÁN
Input: Dãy các đối tượng (Các số): Arr[0], Arr[1],…,Arr[n-1].
Output: Dãy các đối tượng đã được sắp xếp (Các số): Arr[0], Arr[1],…,Arr[n-1]
Actions:
void InsertionSort(ref int[] a, int n)
{
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
int pos, i;
int tmp;//lưu giá trị a[i] tránh bị ghi đè khi dời chỗ các phần tử.
for(i=1 ; i
tmp = a[i]; pos = i-1;
// tìm vị trí chèn x
while((pos >= 0) && (a[pos] > tmp))
{//kết hợp dời chỗ các phần tử sẽ đứng sau x trong dãy mới
a[pos+1] = a[pos];
pos--;
}
a[pos+1] = tmp; // chèn x vào dãy
}
}
End
26
KHOA CÔNG NGHỆ THÔNG TIN
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
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
27
KHOA CÔNG NGHỆ THÔNG TIN
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
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
28
KHOA CÔNG NGHỆ THÔNG TIN
ĐÁNH GIÁ THUẬT
TOÁN
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
29
KHOA CÔNG NGHỆ THÔNG TIN
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
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
30
KHOA CÔNG NGHỆ THÔNG TIN
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
KIỂM TRA
Câu 1:
cho một mảng gồm các phần tử không có thứ tự:
14 – 33 – 27 – 110 – 19
a)Biểu diễn Giải thuật sắp xếp nổi bọt
b)Biểu diễn giải thuật sắp xếp chèn
c)Biểu diễn giải thuật sắp xếp chọn
31
KHOA CÔNG NGHỆ THÔNG TIN
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com
#Ôn tập:
1. Áp dụng giải thuật tìm kiếm nhị phân – Binary Search.
Mảng sắp xếp tăng dần. Dãy số gồm 8 phần tử x=12 (n=8)
2 5 7 9 11 15 18 20
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 = [40, 15, 30]
32
KHOA CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ THÔNG TIN
for (j =0 ; j < n-1 ; j ++)
if(a[j]> a[j+1])// nếu sai vị trí thì đổi chỗ
Swap(a[j], a[j+1]);
9
} End KHOA CÔNG NGHỆ THÔNG TIN
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com
#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
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com
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 B.5: nếu i < (n-1) (0 < 1): Đúng thì i =i+1 = 0 +1 = 1 và quay lại B.2
11
KHOA CÔNG NGHỆ THÔNG TIN
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com
+B.2: j = 0 (i= 1) ; B.3: nếu A[0] > A[1] (13 > 6) thì Hoán đổi giữa 13 và 6 [6, 13,19] ; B.4: Nếu (j < n – i – 1) (0 < 0) : Sai thì chuyển sang B.5 B.5: Nếu (i < n – 1) (1 < 1): Sai thì Dừng Kết thúc. Vậy mảng được sắp xếp là: [6, 13,19].
12
KHOA CÔNG NGHỆ THÔNG TIN
Kiểm tra 30’: Á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]
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com
13
KHOA CÔNG NGHỆ THÔNG TIN
ĐÁNH GIÁ THUẬT TOÁN
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com
14
KHOA CÔNG NGHỆ THÔNG TIN
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com
Đánh giá độ phức tạp - thuật toán Bubble Sort void BubbleSort() { int i, j ; for (i = 2; i <= n; i++) for ( j = n; j >= i; j--) if (a[j-1] > a[j]) //hoán chuyển swap(&a[j-1], &a[j]); }
15
KHOA CÔNG NGHỆ THÔNG TIN
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com
02. SELECTION SORT • Thuật toán thực hiện sắp xếp dãy các đối tượng bằng cách lặp kiểu chọn. Thuật toán thực hiện sắp xếp dãy các đối tượng bằng cách lặp lại việc tìm kiếm phần tử có giá trị nhỏ nhất từ thành phần chưa được sắp xếp trong mảng và đặt nó vào vị trí đầu tiên của dãy. Trên dãy các đối tượng ban đầu, thuật toán luôn duy trì hai dãy con:
- Dãy con đã được sắp xếp: là các phần tử bên trái của dãy.
- Dãy con chưa được sắp xếp là các phần tử bên phải của
dãy.
• Quá trình lặp sẽ kết thúc khi dãy con chưa được sắp xếp chỉ
còn lại đúng một phần tử
16
KHOA CÔNG NGHỆ THÔNG TIN
CÁC BƯỚC CỦA THUẬT TOÁN Bước 1: i = 0;
Bước 2: Tìm phần tử a[min] nhỏ nhất trong dãy hiện hành từ a[i] đến a[N]
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com
Bước 3 : Đổi chỗ a[min] và a[i]
Bước 4 : Nếu i < N-1 thì
i = i+1; Lặp lại Bước 2;
Ngược lại: Dừng.
17
KHOA CÔNG NGHỆ THÔNG TIN
MINH HỌA THUẬT TOÁN • Cho 1 dãy phần tử các giá trị như sau: { 15,2,8,7,3,6,9,17}
I = 0 15 2 8 7 3 6 9 17
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com
I = 1 2 15 8 7 3 6 9 17
I = 2 2 3 8 7 15 6 9 17
I = 3 2 3 6 7 15 8 9 17
I = 4 2 3 6 7 15 8 9 17
I = 5 2 3 6 7 8 15 9 17
I = 6 2 3 6 7 8 9 15 17
18
KHOA CÔNG NGHỆ THÔNG TIN
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com
#minh họa – giải thuật sắp xếp chọn arr[] = 65 – 27 – 16 – 24 - 3 // Tìm phần tử nhỏ nhất trong trong arr[0...4] // và đổi chỗ nó với phần tử đầu tiên [3] – 27 – 16 – 24 – 65 // Tìm phần tử nhỏ nhất trong trong arr[1...4] // và đổi chỗ nó với phần tử đầu tiên của arr[1...4] 3 - [16] – 27 – 24 - 65 // Tìm phần tử nhỏ nhất trong trong arr[2...4] // và đổi chỗ nó với phần tử đầu tiên của arr[2...4] 3 – 16 - [24] – 27 – 65 // Tìm phần tử nhỏ nhất trong trong arr[3...4] // và đổi chỗ nó với phần tử đầu tiên của arr[3...4] 3 – 16 – 24 - [27] – 65.
19
KHOA CÔNG NGHỆ THÔNG TIN
#Bài tập: Thực hiện tính toán từng bước theo giải thuật sắp xếp chọn – Selection Sort. Cho mảng: A = [30, 65, 100, 20, 40, 75]
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com
20
KHOA CÔNG NGHỆ THÔNG TIN
CÀI ĐẶT THUẬT TOÁN Input: Dãy các đối tượng (Các số): Arr[0], Arr[1],…,Arr[n-1]. Output: Dãy các đối tượng đã được sắp xếp (Các số): Arr[0], Arr[1],…,Arr[n-1] Actions: void SelectionSort(ref a[],int n ) {
感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿! ibaotu.com
int min,i,j; // chỉ số phần tử nhỏ nhất trong dãy hiện hành
for (i=0; i min = i;
for(j = i+1; j min = j; // lưu vtrí phần tử hiện nhỏ nhất Swap(a[min],a[i]); } 21 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com 22 đầu tiên a0 , a1 ,... ,ai-1 đã có thứ tự. 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com • Tìm cách chèn phần tử ai vào vị trí thích hợp của
đoạn đã được sắp để có dãy mới a0 , a1,... ,ai trở
nên có thứ tự. Vị trí này chính là vị trí giữa hai
phần tử ak-1 và ak thỏa ak-1 < ai < ak (1≤k≤i). 23 Bước 2: x = a[i]; Tìm vị trí pos thích hợp trong đoạn a[0]
đến a[i-1] để chèn a[i] vào sang 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com Bước 3: Dời chỗ các phần tử từ a[pos] đến a[i-1]
phải 1 vị trí để dành chổ cho a[i] Bước 4: a[pos] = x; //có đoạn a[0]..a[i] đã được sắp Bước 5: i = i+1; Nếu i < n: Lặp lại Bước 2 Ngược lại: Dừng 24 3 6 1 8 4 5 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com 3 6 1 8 4 5 1 3 6 8 4 5 1 3 6 8 4 5 1 3 4 6 8 5 1 3 4 5 6 8 25 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com int pos, i;
int tmp;//lưu giá trị a[i] tránh bị ghi đè khi dời chỗ các phần tử.
for(i=1 ; i tmp = a[i]; pos = i-1;
// tìm vị trí chèn x
while((pos >= 0) && (a[pos] > tmp))
{//kết hợp dời chỗ các phần tử sẽ đứng sau x trong dãy mới a[pos+1] = a[pos];
pos--; }
a[pos+1] = tmp; // chèn x vào dãy } 26 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com 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 27 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com 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 28 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com 29 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com 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 30 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com 31 感谢您下载包图网平台上提供的PPT作品,为了您和包图网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!包图网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!
ibaotu.com 32}
End
KHOA CÔNG NGHỆ THÔNG TIN
ĐÁNH GIÁ GIẢI
THUẬT
KHOA CÔNG NGHỆ THÔNG TIN
03. INSERTION SORT
• Giả sử có một dãy a0 , a1 ,... ,an-1 trong đó i phần tử
KHOA CÔNG NGHỆ THÔNG TIN
CÁC BƯỚC CỦA THUẬT
TOÁN
Bước 1: i = 1; //giả sử có đoạn a[0] đã được sắp
KHOA CÔNG NGHỆ THÔNG TIN
MINH HỌA THUẬT
TOÁN
• Cho 1 dãy phần tử các giá trị như sau: { 3, 6, 1, 8, 4, 5 }
KHOA CÔNG NGHỆ THÔNG TIN
CÀI ĐẶT THUẬT
TOÁN
Input: Dãy các đối tượng (Các số): Arr[0], Arr[1],…,Arr[n-1].
Output: Dãy các đối tượng đã được sắp xếp (Các số): Arr[0], Arr[1],…,Arr[n-1]
Actions:
void InsertionSort(ref int[] a, int n)
{
}
End
KHOA CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ THÔNG TIN
ĐÁNH GIÁ THUẬT
TOÁN
KHOA CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ THÔNG TIN
KIỂM TRA
Câu 1:
cho một mảng gồm các phần tử không có thứ tự:
14 – 33 – 27 – 110 – 19
a)Biểu diễn Giải thuật sắp xếp nổi bọt
b)Biểu diễn giải thuật sắp xếp chèn
c)Biểu diễn giải thuật sắp xếp chọn
KHOA CÔNG NGHỆ THÔNG TIN
#Ôn tập:
1. Áp dụng giải thuật tìm kiếm nhị phân – Binary Search.
Mảng sắp xếp tăng dần. Dãy số gồm 8 phần tử x=12 (n=8)
2 5 7 9 11 15 18 20
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 = [40, 15, 30]
KHOA CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ THÔNG TIN