1 / 29

Bài báo cáo

Bài báo cáo. Nhóm 1. CÁC VẤN ĐỀ VỀ MẢNG. Sắp xếp mảng thông thường Sắp xếp mảng bằng đệ quy Tìm kiếm trên mảng. Sắ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.

Download Presentation

Bài báo cáo

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Bài báo cáo Nhóm 1

  2. CÁC VẤN ĐỀ VỀ MẢNG

  3. Sắp xếp mảng thông thường • Sắp xếp mảng bằng đệ quy • Tìm kiếm trên mảng

  4. Sắ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

  5. 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 Sắp xếp chọn trực tiếp

  6. void ChonTrucTiep(int a[],int n) { int min; for(int i=0;i<n;++i) { min=i; for(int j=i+1;j<n;++j) if(a[min]>a[j]) min=j; if(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); } Code

  7. 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ự Sắp xếp chèn trực tiếp

  8. 4 7 9 1 3 5

  9. void ChenTrucTiep(int a[],int n) { int x,k; for(int i=1;i<n;++i) { x=a[i]; k=i-1; while(k>=0 && a[k]>x) { a[k+1]=a[k]; k--; } if(i!=k+1) a[k+1]=x; } XuatMang(a,n); } void ChenTrucTiepDeQui(int a[],int n, int i) { if(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); } Code

  10. 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ự Bubble Sort

  11. 5 1 1 1 1 1 7 5 2 2 8 7 5 3 3 8 7 5 4 4 8 7 5 5 8 7 6 6 8 7 7 8 8 1 2 2 2 3 3 1 4 4 2 5 2 4 3 3 4 4 6 6 6 6 3 6

  12. void BubbleSort(int a[],int n) { for(int i=0;i<n;++i) for(int j=n-1;j>=i;--j) if(a[j]<a[j-1]) DoiCho(a[j],a[j-1]); XuatMang(a,n); } void NoiBotDeQui(int a[], int n, int i) { if(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); } Code

  13. Giai đoạn1: Hiệu chỉnh danh sách đã cho thành heap đầu tiên Kết quả là ta có heap thứ nhất và phần tử đầu tiên của heap là phần tử có khóa nhỏ nhất Giai đoạn 2: 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 Heapsort

  14. void HeapSort(int a[],int n) { int r,q; q=n/2-1; r=n-1; while(q>=0) { Sift(a,q,r); q=q-1; } DoiCho(a[0],a[r]); r--; while(r>0) { Sift(a,0,r); DoiCho(a[0],a[r]); r--; } for(int i=0;i<n-i-1;i++) DoiCho(a[i],a[n-i-1]); XuatMang(a,n); } Code

  15. void TaoHeab1DeQui(int a[],int q, int r) { if(q<0) return; Sift1(a,q,r); q=q-1; TaoHeab1DeQui(a,q,r); } Code

  16. void TaoHeab234DeQui(int a[], int r) { if(r<=0) return; Sift1(a,0,r); DoiCho(a[0],a[r]); r--; TaoHeab234DeQui(a,r); } Code

  17. void HeabSortDeQui(int a[], int n,int q,int r) { TaoHeab1DeQui(a,q,r); DoiCho(a[0],a[r]); r--; TaoHeab234DeQui(a,r); } Code

  18. void Sift1(int a[],int q, int r) { int x,i,j; i=q; j=2*i+1; x=a[i]; DeQuiVongWhileTrongSift(a,i,j,r,x); a[i]=x; } Code

  19. void DeQuiVongWhileTrongSift(int a[], int &i, int &j , int r,int& x) { if(j>=r) return; if(j<r && a[j]>a[j+1]) j=j+1; if(x<a[j]) return; a[i]=a[j]; i=j; j=2*i+1; DeQuiVongWhileTrongSift(a,i,j,r,x); } Code

  20. Tìm kiếm tuần tự Tìm kiếm nhị phân Tìm kiếm

  21. 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ảngkhông tìm thấy phần tử cần tìm Tìm kiếm tuần tự

  22. Tìm x=3 Tìm kiếm thành công X= Hết mảng không tìn thấy x=10 Tìm x=10

  23. int TimKiemTuanTu(int a[],int n) { int x; cout<<"Cho biet phan tu muon tim kiem : "; cin>>x; for(int i=0;i<n;++i) if(a[i]==x) return i; return -1; } Code

  24. 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 sánh x và y Nếu x=y:kết thúc Nếu x<y thì phạm vi tìm kiếm mới là các phần tử nằm trước y Nếu x>y: phạm vi tìm kiếm là các [hần tử nằm phía sau y 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 Tìm kiếm nhị phân

  25. Tìm x=10 10>7 tìm thấy

  26. int TimKiemNhiPhan(int a[],int n,int x,int L,int R) { cout<<"Cho biet phan tu can tim : "; cin>>x; int u=(L+R)/2; if(a[u]==x) return u; if(a[u]>x) return TimKiemNhiPhan(a,n,x,L,u-1); if(a[u]<x) return TimKiemNhiPhan(a,n,x,u+1,R); return -1; } Code

  27. The endThank you!!!

More Related