1. Trang chủ
  2. » Luận Văn - Báo Cáo

Báo cáo bài thi giữa kì Bộ môn Cấu Trúc Dữ Liệu CÁC VẤN ĐỀ VỀ MẢNG

29 397 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 29
Dung lượng 912 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

The endThank you!!!.

Trang 1

Bài báo cáo

Nhóm 1

Trang 2

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

Trang 3

NSN

Trang 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

Trang 5

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

Trang 6

NSN

Trang 7

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 );

}

Trang 8

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ự

Trang 9

NSN

Trang 10

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); }

Trang 11

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ự

Trang 12

12357

846

12345786

12345678

1 2 3 4 5 6 7 8

Trang 13

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);

}

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 15

NSN 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 16

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);

}

Trang 20

}

Trang 22

Tìm kiếm

• Tìm kiếm tuần tự

• Tìm kiếm nhị phân

Trang 23

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

Trang 26

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

• 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 29

The end

Thank you!!!

Ngày đăng: 04/04/2015, 15:12

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w