Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 21 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
21
Dung lượng
196,5 KB
Nội dung
1
Môn: CẤU TRÚC DỮ LIỆU
Chương 3: KỸ THUẬTSẮP XẾP
2
NỘI DUNG CHƯƠNG 3
1. Khái quát về sắp xếp
2. Các phương pháp sắpxếp (Sắp xếp trên dãy)
Sắp xếp bằng phương pháp chọn trực tiếp (Selection)
Sắp xếp bằng phương pháp chèn trực tiếp (Insertion)
Sắp xếp bằng phương pháp đổi chỗ trực tiếp
(Exchange)
Sắp xếp bằng phương pháp trộn (Merge)
3. Các phương pháp sắpxếp (Sắp xếp trên tập tin)
Sắp xếp tập tin bằng phương pháp trộn
Sắp xếp tập tin theo chỉ mục
BÀI TẬP
3
1. Khái quát về sắp xếp
Sắp xếp là thao tác cần thiết thường được thực hiện trong quá
trình lưu trữ và quản lý dữ liệu.
Thứ tự dữ liệu có thể tăng hay giảm, tăng hay giảm thuật toán
sắp xếp là tương tự.
Hai nhóm giải thuậtsắp xếp
Các giải thuậtsắpxếp thứ tự nội (sx thứ tự trên mảng)
Các giải thuậtsắpxếp thứ tự ngoại (sx thứ tự trên tập tin)
Xem như mỗi phần tử dữ liệu được xem xét có một thành
phần khóa (Key) để nhận diện có kiểu dữ liệu T, các thành
phần còn lại là thông tin (Info), như vậy mỗi phần tử có
cấu trúc như sau:
typedef struct DataElement
{
T Key;
InfoData Info;
} DataType;
Để đơn giản, quan tâm thành phần dữ liệu chỉ là khóa nhận
diện
4
2. Sắpxếp trên dãy/mảng (tt)
2.1. Sắpxếp bằng phương pháp chọn trực tiếp (Selection
Sort)
Dãy a có N phần tử chưa có thứ tự. Chọn phần tử nhỏ
nhất của dãy này đưa lên đầu dãy.
Sau lần chọn thứ nhất, còn lại N-1 phần tử chưa có thứ
tự. Tiếp tục thực hiện, sau N-1 lần lựa chọn và đưa phần
tử nhỏ nhất lên trên
dãy a có thứ tự tăng dần.
Để tìm phần tử nhỏ nhất của dãy dựa vào cách tìm kiếm
duyệt dãy tuần tự.
5
2. Sắpxếp trên dãy/mảng (tt)
2.1. (tt) Selection Sort: Thuật toán
B1: i=1
B2: Tìm phần tử nhỏ nhất a[min] trong dãy từ a[i] đến a[n]
B3: Hoán vị a[min] với a[i]
B4: Nếu i<n thì i=i+1. lặp lại B2
Ngược lại: Dừng
6
2. Sắpxếp trên dãy/mảng (tt)
2.1. (tt) Straight Selection Sort: Cài đặt thuật toán
void SelectionSort(int a[], int n)
{ int i,j,min;
for(i=0; i<n-1;i++)
{
min=i;
for(j=i+1;j<n;j++)
if(a[j]<a[min])
min=j;
hoanvi(a[min],a[i])
}
}
7
2. Sắpxếp trên dãy/mảng (tt)
2.1. (tt) Straight Selection Sort: Cài đặt thuật toán
void hoanvi(int &a, int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}
8
2. Sắpxếp trên dãy/mảng (tt)
2.1. (tt) Chọn trực tiếp (Straight Selection Sort)
Phân tích thuật toán:
Trong mọi trường hợp
Số phép so sánh S = (N-1) + (N-2) +… + 1 = ½N(N-1)
Số phép hoán vị H = N-1
Trong trường hợp tốt nhất
Số phép gán G
min
= 2 x (N-1)
Trong trường hợp xấu nhất
Số phép gán G
max
= 2 x [(N-1) + (N-2) +… + 1]
Trong trường hợp trung bình
Số phép gán G
avg
= (G
min
+G
max
)/2
9
2. Sắpxếp trên dãy/mảng (tt)
2.2. Sắpxếp bằng phương pháp chèn trực tiếp (Insertion
Sort)
a. thuật toán:
Giả sử ta có dãy a1,a2,…,a
n
trong đó i phần tử đầu tiên a1,a2,
…,a
i-1
đã có thứ tự. Ý tưởng của giải thuật là tìm cách
chèn phần tử a
i
vào vị trí thích hợp của đoạn đã sắpxếp
để có dãy a1,a2,…,a
i
có thứ tự.
Cho dãy a1,a2,…, a
n
. Ta có thể xem như đã có đoạn gồm một
phần tử a1 đã sắp xếp. Sau đó ta thêm a2 vào đoạn a1, sẽ
có đoạn a1,a2 sắp xếp. Tương tự thêm a3 vào a1, a2…
tiếp tục cho đến khi thêm a
n
vào a1,a2,…,a
n-1.
Các bước
tiến hành như sau:
10
2. Sắpxếp trên dãy/mảng (tt)
B1: i=2; //giả sử a[1] đã được sắp
B2: x=a[i]
Tìm vị trí pos thích hợp trong đoạn a[1] đến a[i-1] để chèn
a[i] vào
B3: Dời chổ các phần tử từ a[pos] đến a[i-1] sang phải một vị
trí để dành chổ cho a[i]
B4: a[pos]=x; //có đoạn a[1],…,a[i] đã được sắp
B5: i=i+1
Nếu i<=n. lặp lại B2
Ngược lại: dừng
[...]... i=i+1; Nếu i . TRÚC DỮ LIỆU
Chương 3: KỸ THUẬT SẮP XẾP
2
NỘI DUNG CHƯƠNG 3
1. Khái quát về sắp xếp
2. Các phương pháp sắp xếp (Sắp xếp trên dãy)
Sắp xếp bằng phương. pháp sắp xếp (Sắp xếp trên tập tin)
Sắp xếp tập tin bằng phương pháp trộn
Sắp xếp tập tin theo chỉ mục
BÀI TẬP
3
1. Khái quát về sắp xếp
Sắp xếp là