The endThank you!!!.
Trang 1Bài báo cáo
Nhóm 1
Trang 2CÁC VẤN ĐỀ VỀ MẢNG
Trang 3NSN
Trang 4Sắp xếp
• Sắp xếp chọn trực tiếp
• Sắp xếp chèn trực tiếp
• Sắp xếp Bublesort
• Sắp xếp Heapsort
Trang 5Sắp xếp chọn trực tiếp
• Giả sử mảng đã sắp xếp tăng có n phần tử
• Chọn phần tử nhỏ nhất đổi chổ với phần tử thứ nhất
• Từ n-1 phần tử còn lại,ta cùng chọn ra phần tử nhỏ
nhất,đổi chổ cho phân tử thứ hai
• Tiếp tục cho đến hết mảng
Trang 6NSN
Trang 7if(i!=min) DoiCho(a[i],a[min]);
}
XuatMang(a,n);
}
void ChonTrucTiepDeQui(int a[],int n,int i)
{ int min;
if(i>=n-1) return ; min=i;
VongLap2ChonTrucTiep(a, n,min,i+1);
if(i!=min) DoiCho(a[i],a[min]);
ChonTrucTiepDeQui(a,n,i+1 );
}
Trang 8Sắp xếp chèn trực tiếp
• Từ phấn tử đầu tiên coi như là một mảng mới
có một phần tử đã có thứ tự
• Chèn thêm phần tử thứ 2 vào trướcnếu nhỏ hơn
hoặc sau(nếu lớn hơn) phần tử thứ nhất để có một mảng hai phấn tử có thứ tự.
• Cứ tiếp tục như thế cho đến hết
• Cuối cùng ta được một mảng có thứ tự
Trang 9NSN
Trang 10if(i>=n) return ; int x=a[i];
int k=i-1;
VongLap2ChenTrucTiep(a,x,k); a[k+1]=x;
ChenTrucTiepDeQui(a,n,i+1); }
void VongLap2ChenTrucTiep(int a[],int x,int &k)
{ if(!(k>=0 && a[k]>x)) return ; a[k+1] = a[k];
k ;
VongLap2ChenTrucTiep(a,x,k); }
Trang 11Bubble Sort
• Xét tuần tự từng cặp phần tửmột từ từ cuối mảng đến đầu mảng
• Đổi chổ sao cho phần tử nhỏ hơn
đứng trước phần tử còn lại
• Lặp lại quá trình này cho đến khi
không còn việc đổ chỗ hai phần tử
• Khi đó ta sẽ cò kết quả là một mảng
được sắp thứ tự
Trang 1212357
846
12345786
12345678
1 2 3 4 5 6 7 8
Trang 13if(i>=n) return ; VongLap2NoiBot(a,i,n-1); NoiBotDeQui(a,n,++i);
} void VongLap2NoiBot(int a[], int i, int j)
{ if(j<i) return;
if(a[j-1]>a[j])
DoiCho(a[j],a[j-1]);
VongLap2NoiBot(a,i, j);
}
Trang 14– B1:Đưa phần tử nhỏ nhất về cuối dãy bằng cách
hoán vị a[0] và a[n-1]
– B2:Loại bỏ phần tử hỏ nhất (phần tử ở cuối dãy) ra
khỏi dãy (n=n-1),phần còn lại coi như là một danh sách mới
– B3:Nếu n>0 thì hiệu chỉnh danh sách mới thành một
heap mới bằng cáchxét phần tử đầu tiên x=a[0].Sau khi hoán vị,tại vị trí mới nếu x còn có các nút con thì
ta điểu chỉnh tiếp.Cứ tiếp tục như thế cho đến khi x
ko còn nút con,lặp lại bước1.Nếu n=0,giải thuật kết thúc
• Ta được mảng sắp theo thứ tự giảm dần
Trang 15NSN 9 8 12 7 17 6 2 5 3
Heap 1 2 3 6 5 14 9 12 8 7
7 3 6 5 14 9 12 8 2 Heap 2 3 7 6 5 14 9 12 8 2
14 12 9 8 7 6 5 3 2
Heap 8 12 14 9 8 7 6 5 3 2
14 12 9 8 7 6 5 3 2
Trang 16DoiCho(a[0],a[r]);
r ;
} for(int i=0;i<n-i-1;i++)
DoiCho(a[i],a[n-i-1]); XuatMang(a,n);
}
Trang 20}
Trang 22Tìm kiếm
• Tìm kiếm tuần tự
• Tìm kiếm nhị phân
Trang 23Tìm kiếm tuần tự
• Cho một mảng chưa có thứ tự
• Ta bắt đầu tìm kiếm từ phần tử đầu tiên
• Nếu phần tử này không phải ta tìm đến
phần tử kế
• Cứ như thế cho đến khi gặp phần tử
cần tìm tìm kiếm thành công
• Hay cho đến khi đi hết mảngkhông
tìm thấy phần tử cần tìm
Trang 26Tìm kiếm nhị phân
• Mảng đã có thứ tự
• B1:phạm vi tìm kiếm ban đầu là toàn bộ danh sách
• B2:Gán ptử x cần tìm là ptử chính giữa gọi là y,so
• B3:Nếu tồn tại phạm vi tìm kiếm mới,lặp lại bước
2,ngược lại,giải thuật kết thúc,tìm kiếm thất bại
Trang 28}
Trang 29The end
Thank you!!!