![Page 1: Tìm kiếm và sắp xếp - VNUuet.vnu.edu.vn/~tqlong/2016thcs4/slide6_array_algorithms.pdfSắp xếp Sắp xếp dữ liệu liên quan đến việc sắp xếp mảng theo một](https://reader033.vdocuments.net/reader033/viewer/2022050200/5f5445ebaa16836d8c15c624/html5/thumbnails/1.jpg)
Tìm kiếm và sắp xếpTìm kiếm và sắp xếp
TS. Bùi Ngọc ThăngBM KHMT- Khoa CNTT
![Page 2: Tìm kiếm và sắp xếp - VNUuet.vnu.edu.vn/~tqlong/2016thcs4/slide6_array_algorithms.pdfSắp xếp Sắp xếp dữ liệu liên quan đến việc sắp xếp mảng theo một](https://reader033.vdocuments.net/reader033/viewer/2022050200/5f5445ebaa16836d8c15c624/html5/thumbnails/2.jpg)
Nội dung chínhNội dung chính
Giải thích sự cần thiết việc tìm kiếm và sắp xếp
Thảo luận về các thuật toán sắp xếp cơ bản:Sắp xếp nổi bọt (Bubble Sort)Sắp xếp chọn (Selection Sort)
Thảo luận về các thuật toán tìm kiếm:Tìm kiếm tuyến tính (Linear Search)Tìm kiếm nhị phân (Binary Search)
![Page 3: Tìm kiếm và sắp xếp - VNUuet.vnu.edu.vn/~tqlong/2016thcs4/slide6_array_algorithms.pdfSắp xếp Sắp xếp dữ liệu liên quan đến việc sắp xếp mảng theo một](https://reader033.vdocuments.net/reader033/viewer/2022050200/5f5445ebaa16836d8c15c624/html5/thumbnails/3.jpg)
Sắp xếpSắp xếp
Sắp xếp dữ liệu liên quan đến việc sắp xếp mảng theo một thứ tự nào đó chẳng hạn như tăng dần hoặc giảm dần.
Dữ liệu trong mảng dễ dàng tìm kiếm khi được sắp xếp.
Có hai cách thức dùng sắp xếp mảng Sắp xếp lựa chọn (Selection Sort) và Sắp xếp nổi bọt (Bubble Sort )
![Page 4: Tìm kiếm và sắp xếp - VNUuet.vnu.edu.vn/~tqlong/2016thcs4/slide6_array_algorithms.pdfSắp xếp Sắp xếp dữ liệu liên quan đến việc sắp xếp mảng theo một](https://reader033.vdocuments.net/reader033/viewer/2022050200/5f5445ebaa16836d8c15c624/html5/thumbnails/4.jpg)
Sắp xếp (tiếp)Sắp xếp (tiếp)
Trong cách sắp xếp lựa chọn: giá trị của phần tử hiện tại được so sánh với các phần tử tiếp theo trong mảng để thu được giá trị lớn/nhỏ nhất.
Có 2 phương pháp trong sắp xếp nổi bọt được triển khai: Từ dưới lên (Bottom-up): So sánh các giá trị lần
lượt từ cuối mảng nếu nhỏ hơn thì dẫn dần cho lên trên
Từ trên xuống: So sánh bắt đầu từ phần tử trên cùng, nếu phần tử lớn hơn sẽ bị chìm xuống dưới.
![Page 5: Tìm kiếm và sắp xếp - VNUuet.vnu.edu.vn/~tqlong/2016thcs4/slide6_array_algorithms.pdfSắp xếp Sắp xếp dữ liệu liên quan đến việc sắp xếp mảng theo một](https://reader033.vdocuments.net/reader033/viewer/2022050200/5f5445ebaa16836d8c15c624/html5/thumbnails/5.jpg)
Sắp xếp nổi bọt Sắp xếp nổi bọt
Ý tưởng: So sánh hai phần tử kề nhau, nếu chúng chưa
đứng đúng thứ tự thì đổi chỗ (swap). Có thể tiến hành từ trên xuống (bên trái sang)
hoặc từ dưới lên (bên phải sang)
![Page 6: Tìm kiếm và sắp xếp - VNUuet.vnu.edu.vn/~tqlong/2016thcs4/slide6_array_algorithms.pdfSắp xếp Sắp xếp dữ liệu liên quan đến việc sắp xếp mảng theo một](https://reader033.vdocuments.net/reader033/viewer/2022050200/5f5445ebaa16836d8c15c624/html5/thumbnails/6.jpg)
Sắp xếp nổi bọtSắp xếp nổi bọt
148 22221717814148
17
1481266
142214
12
2217178 2214814228 8222261212 6126
Cho một mảng có n phần tử Lặp lại các bước sau n-1 lần:
Với a[i] và a[i+1]:Nếu a[i] lớn hơn a[i+1] thì đổi vị trí cho nhau.
6 12 17
![Page 7: Tìm kiếm và sắp xếp - VNUuet.vnu.edu.vn/~tqlong/2016thcs4/slide6_array_algorithms.pdfSắp xếp Sắp xếp dữ liệu liên quan đến việc sắp xếp mảng theo một](https://reader033.vdocuments.net/reader033/viewer/2022050200/5f5445ebaa16836d8c15c624/html5/thumbnails/7.jpg)
Sắp xếp nổi bọtSắp xếp nổi bọt#include <stdio.h>void main() {int i,j,temp,arr[5]={23,90,9,25,16};
for (int i=0; i<4; i++) { for (int j=0; j<5-i-1; j++) { if (arr[j] > arr[j+1]) { int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } Tiếp…..
![Page 8: Tìm kiếm và sắp xếp - VNUuet.vnu.edu.vn/~tqlong/2016thcs4/slide6_array_algorithms.pdfSắp xếp Sắp xếp dữ liệu liên quan đến việc sắp xếp mảng theo một](https://reader033.vdocuments.net/reader033/viewer/2022050200/5f5445ebaa16836d8c15c624/html5/thumbnails/8.jpg)
Sắp xếp nổi bọt ( tiếp)Sắp xếp nổi bọt ( tiếp)
printf("\nThe sorted array");for(i=0;i<5;i++)
printf("\n%d", arr[i]); getch();
}
![Page 9: Tìm kiếm và sắp xếp - VNUuet.vnu.edu.vn/~tqlong/2016thcs4/slide6_array_algorithms.pdfSắp xếp Sắp xếp dữ liệu liên quan đến việc sắp xếp mảng theo một](https://reader033.vdocuments.net/reader033/viewer/2022050200/5f5445ebaa16836d8c15c624/html5/thumbnails/9.jpg)
Mảng – Sắp xếp chọn (Selection sort)
• Ý tưởng:– Chọn phần tử nhỏ nhất trong n phần tử ban đầu, đưa
phần tử này về vị trí đúng là đầu tiên của dãy hiện hành.
– Sau đó không quan tâm đến nó nữa, xem dãy hiện hành chỉ còn n-1 phần tử của dãy ban đầu, bắt đầu từ vị trí thứ 2.
– Lặp lại quá trình trên cho dãy hiện hành đến khi dãy hiện hành chỉ còn 1 phần tử
![Page 10: Tìm kiếm và sắp xếp - VNUuet.vnu.edu.vn/~tqlong/2016thcs4/slide6_array_algorithms.pdfSắp xếp Sắp xếp dữ liệu liên quan đến việc sắp xếp mảng theo một](https://reader033.vdocuments.net/reader033/viewer/2022050200/5f5445ebaa16836d8c15c624/html5/thumbnails/10.jpg)
Mảng – Sắp xếp đổi chổ
2 8 5 1 6 4 1512
2 3 4 5 6 7 81
i
j
12
![Page 11: Tìm kiếm và sắp xếp - VNUuet.vnu.edu.vn/~tqlong/2016thcs4/slide6_array_algorithms.pdfSắp xếp Sắp xếp dữ liệu liên quan đến việc sắp xếp mảng theo một](https://reader033.vdocuments.net/reader033/viewer/2022050200/5f5445ebaa16836d8c15c624/html5/thumbnails/11.jpg)
12 8 5 2 6 4 151
2 3 4 5 6 7 81
i
j
2
Mảng – Sắp xếp đổi chổ
![Page 12: Tìm kiếm và sắp xếp - VNUuet.vnu.edu.vn/~tqlong/2016thcs4/slide6_array_algorithms.pdfSắp xếp Sắp xếp dữ liệu liên quan đến việc sắp xếp mảng theo một](https://reader033.vdocuments.net/reader033/viewer/2022050200/5f5445ebaa16836d8c15c624/html5/thumbnails/12.jpg)
2 12 8 5 6 4 151
2 3 4 5 6 7 81
i
j
4
Mảng – Sắp xếp đổi chổ
![Page 13: Tìm kiếm và sắp xếp - VNUuet.vnu.edu.vn/~tqlong/2016thcs4/slide6_array_algorithms.pdfSắp xếp Sắp xếp dữ liệu liên quan đến việc sắp xếp mảng theo một](https://reader033.vdocuments.net/reader033/viewer/2022050200/5f5445ebaa16836d8c15c624/html5/thumbnails/13.jpg)
2 4 12 8 6 5 151
2 3 4 5 6 7 81
i
j
5
Mảng – Sắp xếp đổi chổ
![Page 14: Tìm kiếm và sắp xếp - VNUuet.vnu.edu.vn/~tqlong/2016thcs4/slide6_array_algorithms.pdfSắp xếp Sắp xếp dữ liệu liên quan đến việc sắp xếp mảng theo một](https://reader033.vdocuments.net/reader033/viewer/2022050200/5f5445ebaa16836d8c15c624/html5/thumbnails/14.jpg)
Tìm kiếmTìm kiếm
Trong bài học này, chúng ta sẽ thảo luận hai cách tìm kiếm:Tìm kiếm tuyến tính
Tìm kiếm nhị phân
![Page 15: Tìm kiếm và sắp xếp - VNUuet.vnu.edu.vn/~tqlong/2016thcs4/slide6_array_algorithms.pdfSắp xếp Sắp xếp dữ liệu liên quan đến việc sắp xếp mảng theo một](https://reader033.vdocuments.net/reader033/viewer/2022050200/5f5445ebaa16836d8c15c624/html5/thumbnails/15.jpg)
Tìm kiếm tuyến tínhTìm kiếm tuyến tính
Đây là cách đơn giản nhất để tìm kiếm một phần tử trong mảng, bằng cách duyệt tất cả các phần tử của mảng cho tới khi tìm thấy phần tử cần tìm.
Còn được gọi là tìm kiếm tuần tự (Sequential searching)
![Page 16: Tìm kiếm và sắp xếp - VNUuet.vnu.edu.vn/~tqlong/2016thcs4/slide6_array_algorithms.pdfSắp xếp Sắp xếp dữ liệu liên quan đến việc sắp xếp mảng theo một](https://reader033.vdocuments.net/reader033/viewer/2022050200/5f5445ebaa16836d8c15c624/html5/thumbnails/16.jpg)
Tìm kiếm tuyến tínhTìm kiếm tuyến tính
#include <stdio.h>#include <conio.h>void main(){
int data[] = {5,2,9,7,6,10};int a = 7;int i;for(i = 0; i<6;i++){
if(a == data[i])break;
}printf(“Number %d found at position %d”,a,i);getch();
}
![Page 17: Tìm kiếm và sắp xếp - VNUuet.vnu.edu.vn/~tqlong/2016thcs4/slide6_array_algorithms.pdfSắp xếp Sắp xếp dữ liệu liên quan đến việc sắp xếp mảng theo một](https://reader033.vdocuments.net/reader033/viewer/2022050200/5f5445ebaa16836d8c15c624/html5/thumbnails/17.jpg)
Tìm kiếm nhị phânTìm kiếm nhị phân
Tìm kiếm nhị phân được thực hiện trên mảng đã được sắp xếp
Thuật toán này sử dụng đệ quy để thực hiện tìm kiếm:Bước 1: So sánh phần tử tìm kiếm với phần tử ở vị
trí giữa mảng. Nếu kết quả so sánh là bằng nhau, kết thúc tìm kiếm.
Bước 2: Nếu kết quả so sánh là nhỏ hơn thì lặp lại bước 1 với phần bên trái của mảng.
Bước 3: Nếu kết quả so sánh là lớn hơn lặp lại bước 1 với phần bên phải của mảng.
![Page 18: Tìm kiếm và sắp xếp - VNUuet.vnu.edu.vn/~tqlong/2016thcs4/slide6_array_algorithms.pdfSắp xếp Sắp xếp dữ liệu liên quan đến việc sắp xếp mảng theo một](https://reader033.vdocuments.net/reader033/viewer/2022050200/5f5445ebaa16836d8c15c624/html5/thumbnails/18.jpg)
821 3 4 65 7 109 11 12 14130
641413 25 33 5143 53 8472 93 95 97966
lo
Ví dụ: Tìm số 33 trong mảng được sắp xếp dưới đây:
hi
Tìm kiếm nhị phân – Ví dụTìm kiếm nhị phân – Ví dụ
![Page 19: Tìm kiếm và sắp xếp - VNUuet.vnu.edu.vn/~tqlong/2016thcs4/slide6_array_algorithms.pdfSắp xếp Sắp xếp dữ liệu liên quan đến việc sắp xếp mảng theo một](https://reader033.vdocuments.net/reader033/viewer/2022050200/5f5445ebaa16836d8c15c624/html5/thumbnails/19.jpg)
Tìm kiếm nhị phân – Ví dụTìm kiếm nhị phân – Ví dụ
Ví dụ: Tìm số 33 trong mảng được sắp xếp dưới đây:
821 3 4 65 7 109 11 12 14130
641413 25 33 5143 53 8472 93 95 97966
lo himid
![Page 20: Tìm kiếm và sắp xếp - VNUuet.vnu.edu.vn/~tqlong/2016thcs4/slide6_array_algorithms.pdfSắp xếp Sắp xếp dữ liệu liên quan đến việc sắp xếp mảng theo một](https://reader033.vdocuments.net/reader033/viewer/2022050200/5f5445ebaa16836d8c15c624/html5/thumbnails/20.jpg)
Ví dụ: Tìm số 33 trong mảng được sắp xếp dưới đây:
821 3 4 65 7 109 11 12 14130
641413 25 33 5143 53 8472 93 95 97966
lo hi
Tìm kiếm nhị phân – Ví dụTìm kiếm nhị phân – Ví dụ
![Page 21: Tìm kiếm và sắp xếp - VNUuet.vnu.edu.vn/~tqlong/2016thcs4/slide6_array_algorithms.pdfSắp xếp Sắp xếp dữ liệu liên quan đến việc sắp xếp mảng theo một](https://reader033.vdocuments.net/reader033/viewer/2022050200/5f5445ebaa16836d8c15c624/html5/thumbnails/21.jpg)
Ví dụ: Tìm số 33 trong mảng được sắp xếp dưới đây:
821 3 4 65 7 109 11 12 14130
641413 25 33 5143 53 8472 93 95 97966
lo mid hi
Tìm kiếm nhị phân – Ví dụTìm kiếm nhị phân – Ví dụ
![Page 22: Tìm kiếm và sắp xếp - VNUuet.vnu.edu.vn/~tqlong/2016thcs4/slide6_array_algorithms.pdfSắp xếp Sắp xếp dữ liệu liên quan đến việc sắp xếp mảng theo một](https://reader033.vdocuments.net/reader033/viewer/2022050200/5f5445ebaa16836d8c15c624/html5/thumbnails/22.jpg)
Ví dụ: Tìm số 33 trong mảng được sắp xếp dưới đây:
821 3 4 65 7 109 11 12 14130
641413 25 33 5143 53 8472 93 95 97966
lo hi
Tìm kiếm nhị phân – Ví dụTìm kiếm nhị phân – Ví dụ
![Page 23: Tìm kiếm và sắp xếp - VNUuet.vnu.edu.vn/~tqlong/2016thcs4/slide6_array_algorithms.pdfSắp xếp Sắp xếp dữ liệu liên quan đến việc sắp xếp mảng theo một](https://reader033.vdocuments.net/reader033/viewer/2022050200/5f5445ebaa16836d8c15c624/html5/thumbnails/23.jpg)
Ví dụ: Tìm số 33 trong mảng được sắp xếp dưới đây:
821 3 4 65 7 109 11 12 14130
641413 25 33 5143 53 8472 93 95 97966
lo himid
Tìm kiếm nhị phân – Ví dụTìm kiếm nhị phân – Ví dụ
![Page 24: Tìm kiếm và sắp xếp - VNUuet.vnu.edu.vn/~tqlong/2016thcs4/slide6_array_algorithms.pdfSắp xếp Sắp xếp dữ liệu liên quan đến việc sắp xếp mảng theo một](https://reader033.vdocuments.net/reader033/viewer/2022050200/5f5445ebaa16836d8c15c624/html5/thumbnails/24.jpg)
Ví dụ: Tìm số 33 trong mảng được sắp xếp dưới đây:
821 3 4 65 7 109 11 12 14130
641413 25 33 5143 53 8472 93 95 97966
lohi
Tìm kiếm nhị phân – ví dụTìm kiếm nhị phân – ví dụ
![Page 25: Tìm kiếm và sắp xếp - VNUuet.vnu.edu.vn/~tqlong/2016thcs4/slide6_array_algorithms.pdfSắp xếp Sắp xếp dữ liệu liên quan đến việc sắp xếp mảng theo một](https://reader033.vdocuments.net/reader033/viewer/2022050200/5f5445ebaa16836d8c15c624/html5/thumbnails/25.jpg)
Ví dụ: Tìm số 33 trong mảng được sắp xếp dưới đây:
821 3 4 65 7 109 11 12 14130
641413 25 33 5143 53 8472 93 95 97966
lohimid
Tìm kiếm nhị phân – Ví dụTìm kiếm nhị phân – Ví dụ
![Page 26: Tìm kiếm và sắp xếp - VNUuet.vnu.edu.vn/~tqlong/2016thcs4/slide6_array_algorithms.pdfSắp xếp Sắp xếp dữ liệu liên quan đến việc sắp xếp mảng theo một](https://reader033.vdocuments.net/reader033/viewer/2022050200/5f5445ebaa16836d8c15c624/html5/thumbnails/26.jpg)
Ví dụ: Tìm số 33 trong mảng được sắp xếp dưới đây:
821 3 4 65 7 109 11 12 14130
641413 25 33 5143 53 8472 93 95 97966
lohimid
Tìm kiếm nhị phân – Ví dụTìm kiếm nhị phân – Ví dụ
![Page 27: Tìm kiếm và sắp xếp - VNUuet.vnu.edu.vn/~tqlong/2016thcs4/slide6_array_algorithms.pdfSắp xếp Sắp xếp dữ liệu liên quan đến việc sắp xếp mảng theo một](https://reader033.vdocuments.net/reader033/viewer/2022050200/5f5445ebaa16836d8c15c624/html5/thumbnails/27.jpg)
Tìm kiếm nhị phânTìm kiếm nhị phân
#include <stdio.h> #include <conio.h>
void main( ) {int data[] = {0,11,13,14,15,17,18};int low =0;int high = 6;int searchValue = 15;int flag =0;
Continue…
![Page 28: Tìm kiếm và sắp xếp - VNUuet.vnu.edu.vn/~tqlong/2016thcs4/slide6_array_algorithms.pdfSắp xếp Sắp xếp dữ liệu liên quan đến việc sắp xếp mảng theo một](https://reader033.vdocuments.net/reader033/viewer/2022050200/5f5445ebaa16836d8c15c624/html5/thumbnails/28.jpg)
Tìm kiếm nhị phân Tìm kiếm nhị phân while(low<=high)
{int mid = (high + low)/2;if(searchValue == data[mid]){
flag = 1;printf(" Element found at index %d\n", mid);break;
} else if(searchValue<data[mid]){high = mid -1;
}else if (searchValue > data[mid]){low = mid +1;
}}if(flag ==0){
printf("Element not found in the array");}
}
![Page 29: Tìm kiếm và sắp xếp - VNUuet.vnu.edu.vn/~tqlong/2016thcs4/slide6_array_algorithms.pdfSắp xếp Sắp xếp dữ liệu liên quan đến việc sắp xếp mảng theo một](https://reader033.vdocuments.net/reader033/viewer/2022050200/5f5445ebaa16836d8c15c624/html5/thumbnails/29.jpg)
Tham khảoTham khảo