8/4/2020
66
CHƯƠNG 4. MỘT SỐ GIẢI THUẬT SẮP XẾP VÀ TÌM KIẾM
4.1 Bài toán sắp xếp và một số phương pháp sắp xếp đơn giản
4.2 Một số phương pháp sắp xếp cải tiến
4.2.1 Sắp xếp nhanh (Quick Sort)
4.2.2 Sắp xếp vun đống (Heap Sort)
4.2.3 Đánh giá
4.3 Bài toán tìm kiếm
4.3.1 Khái quát về tìm kiếm
4.3.2 Tìm kiếm tuần tự (Sequential Searching)
4.3.3 Tìm kiếm nhị phân (Binary Searching)
4.3.4 Đánh giá
Cấu trúc dữ liệu và giải thuật 131
4.1 Bài toán sắp xếp và một số phương pháp sắp xếp đơn giản
4.1.1 Khái quát về sắp xếp
4.1.2 Sắp xếp lựa chọn (Selection Sort)
4.1.3 Sắp xếp chèn (Insertion Sort)
4.1.4 Sắp xếp nổi bọt (Bubble Sort)
4.1.5 Độ phức tạp ca các phép sắp xếp đơn giản
Cấu trúc dữ liệu và giải thuật 132
8/4/2020
67
4.1.1. Khái quát về sắp xếp
Cấu trúc dữ liệu và giải thuật 133
Sắp xếp quá trình bố trí lại các phần tử của một tập đối
tượng nào đó theo thứ tự nhất định (tăng hoặc giảm dần).
dụ:
{1,2,5,7,9}
{“An”, “Bình”, “Dương”, “Hương”}
Việc sắp xếp một bài toán phổ biến trong tin học.
Do các yêu cầu tìm kiếm thuận lợi, sắp xếp kết xuất cho các
bảng biểu,…
Dữ liệu thường được tổ chức thành các bản ghi. Mỗi bản ghi
thường một số các trường dữ liệu khác nhau. Trường tham
gia quá trình tìm kiếm gọi khóa.
4.1.1. Khái quát về sắp xếp
Cấu trúc dữ liệu và giải thuật 134
Khóa sắp xếp
Một bộ phận của bản ghi biểu diễn đối tượng được sắp xếp.
Khóa sẽ được sử dụng để xác đnh thứ tự sắp xếp bản ghi trong
một tập c bản ghi
Bảng khóa
Sử dụng trong sắp xếp khi muốn hạn chế việc di chuyển các dữ
liệu.
Một tập hợp các bản ghi chỉ chứa 2trường:
Khóa: Chứa khóa sắp xếp.
Link: Con trỏ ghi địa chỉ của bản ghi đối tượng dữ liệu tương ứng.
Thứ tự các bản ghi trong bảng khóa cho phép xác đnh thứ tự
các bản ghi dữ liệu.
8/4/2020
68
4.1.1. Khái quát về sắp xếp
Mt s phương pháp sắp xếp
Cấu trúc dữ liệu và giải thuật 135
4.1.1. Khái quát về sắp xếp
Các đặc trưng của thuật toán sắp xếp:
nh n định của thuật toán sắp xếp
Các phần tcó cùng khóa sẽ ginguyên thứ tự tương
đối của chúng như trước khi sắp xếp
Cấu trúc dữ liệu và giải thuật 136
Tính tại chỗ:
Thuật toán đòi hỏi không gian nhớ phụ là hằng số (không ph
thuộc vào số lượng phần tử trong dãy cần sắp)
8/4/2020
69
4.1.1. Khái quát về sắp xếp
Bài toán sắp xếp được đơn giản hóa dưới dạng n
sau:
Đầu vào: Một dãy các số nguyên (các khóa)
Đầu ra: Một hoán vị của dãy số đã cho trong đó giá trị
các khóa được sắp xếp theo thứ tự tăng dần.
Cấu trúc dữ liệu và giải thuật 137
4.1.2 Sắp xếp lựa chọn (Selection Sort)
Ýtưởng:
Tại mi lượt, chọn phần tử nhỏ nhất trong số các phn tử
chưa được sắp.Đưa phần tử được chọn o vị t đúng bằng
phép đổi ch.
Sau lượt thứ i(i = 1..n-1), dãy cần sắp coi như được chia
thành 2 phần:
Phần đã sắp:từ vị trí 1 i
Phần chưa sắp:từ vị trí i +1 n
Cấu trúc dữ liệu và giải thuật 138
8/4/2020
70
4.1.2 Sắp xếp lựa chọn (Selection Sort)
Ví dụ: sắp xếp dãy sau theo thứ tự tăng dần:
A = { 12, 5, 3, 10, 18, 4, 9, 16}
Lượt 1 Lượt 2 Lượt 3 Lượt 4 Lượt 5 Lượt 6 Lượt 7
12 3 3 3 3 3 3 3
5 5 4 4 4 4 4 4
3 12 12 5 5 5 5 5
10 10 10 10 9 9 9 9
18 18 18 18 18 10 10 10
4 4 5 12 12 12 12 12
9 9 9 9 10 18 18 16
16 16 16 16 16 16 16 18
Cấu trúc dữ liệu và giải thuật 139
4.1.2 Sắp xếp lựa chọn (Selection Sort)
Procedure SELECTION-SORT(A,n)
1. for i = 1 to n-1 do begin
2. {Duyt từ đỉnh}
min = i;
3. {Chọn phần tử nh nhất}
for j = i+1 to n do
if A[j] < A[min] then
min = j ;
4. {Đổi chổ phần tử i và phần tử nhnhất}
T = A[i]; A[i] = A[min]; A[min] = T;
end;
End.
Cấu trúc dữ liệu và giải thuật 140