Dãy – Danh sách
Tài liệu tham khảo
6/27/14Nh p môn CTDL và thu t toánậ ậ2
Bài gi ng CTDL, Nguy n Thanh S n, ĐH KHTN TPHCMả ễ ơ
Bài gi ng CTDL, Bùi Hoài Th ng, ĐH Bách Khoa TPHCMả ắ
Bài gi ng CTDL, Nguy n Vi t Anh, ĐH Công ngh HNả ễ ệ ệ
Bài gi ng CTDL, Ph m Th B o, ĐH KHTN TPHCMả ạ ế ả
…………
Nội dung
6/27/14Nh p môn CTDL và thu t toánậ ậ3
Dãy
Đ nh ngh a, khai báoị ĩ
Các thao tác
Tìm ki m và s p x pế ắ ế
Danh sách
Đ nh ngh a, khai báoị ĩ
Các lo i danh sáchạ
Các thao tác
Định nghĩa Danh sách(List)
6/27/14Nh p môn CTDL và thu t toánậ ậ4
Danh sách bao g m m t s bi n đ ng các ph n t có ki u d li u xác đ nh.ồ ộ ố ế ộ ầ ử ể ữ ệ ị
S ph n t c a danh sách g i là chi u dài c a danh sáchố ầ ử ủ ọ ề ủ
Danh sách – Ví dụ
6/27/14Nh p mơn CTDL và thu t tốnậ ậ5
Ví d : Hồ sơ các học sinh của một trường được tổ chức thành danh sách gồm nhiều hồ sơ của từng học ụ
sinh; số lượng học sinh trong trường có thể thay đổi do vậy cần có các thao tác thêm, hủy một hồ sơ; để
phục vụ công tác giáo vụ cần thực hiện các thao tác tìm hồ sơ của một học sinh, in danh sách hồ sơ
Các phép toán trên danh sách
6/27/14Nh p môn CTDL và thu t toánậ ậ6
T o m i 1 danh sáchạ ớ
Thêm 1 ph n tầ ử
Tìm ki m 1 ph n tế ầ ử
Duy t danh sáchệ
Lo i b 1 ph n tạ ỏ ầ ử
S a đ i giá tr 1 ph n tử ổ ị ầ ử
S p th tắ ứ ự
Tách 1 danh sách thành nhi u danh sáchề
Ghép nhi u danh sách thành 1 danh sáchề
Sao chép 1 danh sách
H y 1 danh sáchủ
……………
Phân cấp đặc biệt hoá
6/27/14Nh p môn CTDL và thu t toánậ ậ7
List
tuần tự
First()=pos Value(pos)=item Kth(integer)=item
Next(pos)=pos Length()=integer SetKth(item,integer)
Insert(item,pos) Delete(pos) Find(item)=position
Stack
LIFO
Push(item)
Pop()=item
IsEmpty()=true/false
Queue
FIFO
Enqueue(item)
Dequeue()=item
IsEmpty()=true/false
Vector
ngẫu nhiên
Kth(int) = item
SetKth(item,integer)
Danh sách – cài đặt
6/27/14Nh p môn CTDL và thu t toánậ ậ8
Ki u k ti p: danh sách kể ế ế ề
Ki u liên k t: danh sách liên k tể ế ế
Phân cấp cài đặt
6/27/14Nh p môn CTDL và thu t toánậ ậ9
List
First()=pos Value(pos)=item Kth(integer)=item
Next(pos)=pos Length()=integer SetKth(item,integer)
Insert(item,pos) Delete(pos) Find(item)=position
Linked List Array
Danh sách kề – Cài đặt trên cơ sở mảng
6/27/14Nh p môn CTDL và thu t toánậ ậ10
Max chi u dài t i đa c a danh sáchề ố ủ
Xây d ng c u trúc List g m 2 thành ph n ự ấ ồ ầ
data là m t m ng các ph n t thu c ki u d li u itemộ ả ầ ử ộ ể ữ ệ
count l u ch s c a thành ph n m ng l u gi ph n t cu i cùng c a danh sáchư ỉ ố ủ ầ ả ư ữ ầ ử ố ủ
Dãy – Danh sách
6/27/14Nh p môn CTDL và thu t toánậ ậ11
typedef struct List
{
<kieu du lieu> data[max];
int spt;
}
Sắp xếp
Ph m Thi V ngạ ươ12
Cho t p N ph n t có m thu c tính, đ c bi u di n d i d ng b n ghi.ậ ầ ử ộ ượ ể ễ ướ ạ ả
D a vào 1 (ho c vài) thu c tính đ s p x p các ph n t theo tr t t m iự ặ ộ ể ắ ế ầ ử ậ ự ớ
Sắp xếp
Ph m Thi V ngạ ươ13
G m 2 bài toán con:ồ
D a theo khoá s p x p ự ắ ế đ nh vị ị l i th t b n ghiạ ứ ự ả
Chuy n các b n ghi v v trí m i.ể ả ề ị ớ
Hai thao tác c b nơ ả
So sánh
Gán
Các thuật toán sắp xếp
Ph m Thi V ngạ ươ14
1. Đ i ch tr c ti p – Interchange Sortổ ỗ ự ế
2. N i b t – Bubble Sortổ ọ
3.
Shaker Sort
4. Chèn tr c ti p – Insertion Sortự ế
5.
Chèn nh phân – Binary Insertion Sortị
6. Shell Sort
7. Ch n tr c ti p – Selection Sortọ ự ế
8. Quick Sort
9. Merge Sort
10. Heap Sort
11. Radix Sort
Các thuật toán sắp xếp
Ph m Thi V ngạ ươ15
1. Đ i ch tr c ti p – Interchange Sortổ ỗ ự ế
2. N i b t – Bubble Sortổ ọ
3. Shaker Sort
4. Chèn tr c ti p – Insertion Sortự ế
5. Chèn nh phân – Binary Insertion Sortị
6. Shell Sort
7. Ch n tr c ti p – Selection Sortọ ự ế
8. Quick Sort
9. Merge Sort
10. Heap Sort
11. Radix Sort
Đổi chỗ trực tiếp – Interchange Sort
Ph m Thi V ngạ ươ16
Khái ni m ngh ch th :ệ ị ế
Xét m t m ng các s aộ ả ố
0
, a
1
, . a
n
.
N u có ế i<j và a
i
> a
j
, thì ta g i đó là m t ngh ch th .ọ ộ ị ế
M ng ch a s p x p s có ngh ch th ả ư ắ ế ẽ ị ế
M ng đã có th t s không ch a ngh ch th ả ứ ự ẽ ứ ị ế
Đổi chỗ trực tiếp – Interchange Sort
Ph m Thi V ngạ ươ17
Tìm t t c ngh ch th , tri t tiêu chúng b ng cách hoán v 2 ph n t t ng ng trong ngh ch th ấ ả ị ế ệ ằ ị ầ ử ươ ứ ị ế
Đổi chỗ trực tiếp – Interchange Sort
Ph m Thi V ngạ ươ18
B c 1ướ : i = 1;// b t đ u t đ u dãy ắ ầ ừ ầ
B c 2ướ : j = i+1;//tìm các ph n t a[j] < a[i], j>i ầ ử
B c 3ướ :
Trong khi j < N th c hi n ự ệ
N u a[j]<a[i] ế
//xét c p a[i], a[j]ặ
Doicho(a[i],a[j]);
j = j+1;
B c 4ướ : i = i+1;
N u i < n: L p l i B c 2. ế ặ ạ ướ
Ng c l i: D ng. ượ ạ ừ
Đổi chỗ trực tiếp – Interchange Sort
Ph m Thi V ngạ ươ19
Cho dãy s a: U ố
12 2 8 5 1 6 4 15
Đổi chỗ trực tiếp – Interchange Sort
Ph m Thi V ngạ ươ20
Đổi chỗ trực tiếp – Interchange Sort
Ph m Thi V ngạ ươ21
Đổi chỗ trực tiếp – Interchange Sort
Ph m Thi V ngạ ươ22
Đổi chỗ trực tiếp – Interchange Sort
Ph m Thi V ngạ ươ23
Đổi chỗ trực tiếp – Interchange Sort
Ph m Thi V ngạ ươ24
Đổi chỗ trực tiếp – Interchange Sort
Ph m Thi V ngạ ươ25
void InterchangeSort(int a[], int N )
{
int i, j;
for (i = 0 ; i<N-1 ; i++)
for (j =i+1; j < N ; j++)
if(a[j ]< a[i])
// n u có s sai v trí thì đ i chế ự ị ổ ỗ
Doicho(a[i],a[j]);
}