NSN Bài báo cáo Nhóm 1 NSN CÁC VẤN ĐỀ VỀ MẢNG NSN 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 NSN 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 NSN Sắ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 NSN NSN Code 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); } NSN Sắ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ự NSN 4 9 1 3 57 NSN Code 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) ; } [...]... 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 thi 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 thi ta điểu chỉnh... if(a[i]==x) return i; return -1; } NSN Tì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 sánh x và y – Nếu x=y:kết thúc – Nếu xy: 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... Tì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ảng không tìm thấy phần tử cần tìm NSN Tìm x=3 1 6 Tìm kiếm thành công 8 12 3 X= Hết mảng không tìn thấy x=10 Tìm...NSN Bubble 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ự 5 NSN 7 8 1 4 2 1 5 7 8 2 4 6 3 3 6 1 2 5 7 8 3 4 6 1 2 3 5 7 8 4 6... hoán vị,tại vị trí mới nếu x còn có các nút con thi 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 NSN Heap 8 5 3 2 3 6 5 14 9 12 8 7 3 6 5 14 9 12 8 2 3 7 6 5 14 9 12 8 2 7 6 5 14 9 12 3 2 5 7 6 8 14 9 12 3 2 7 6 8 14 9 5 3 2 6 7 9 8 14 12 5 3 2 7 9 8 14 6 5 3 2 . NSN Bài báo cáo Nhóm 1 NSN CÁC VẤN ĐỀ VỀ MẢNG NSN 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 NSN Sắp xếp • Sắp xếp chọn trực. mới – B3:Nếu n>0 thi 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 thi ta điểu. ; VongLap2ChenTrucTiep(a,x,k) ; } NSN Bubble 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