bài báo cáo

29
NSN Bi bo co Nhm 1

Upload: ginger-lyons

Post on 03-Jan-2016

54 views

Category:

Documents


1 download

DESCRIPTION

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. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Bài báo cáo

NSN

Bai bao cao

Nhom 1

Page 2: Bài báo cáo

NSN

CAC VÂN ĐÊ VÊ MANG

Page 3: Bài báo cáo

NSN

Săp xêp mang thông thương

Săp xêp mang băng đê quy

Tim kiêm trên mang

Page 4: Bài báo cáo

NSN

Săp xêp

• Săp xêp chon trưc tiêp

• Săp xêp chen trưc tiêp

• Săp xêp Bublesort

• Săp xêp Heapsort

Page 5: Bài báo cáo

NSNSăp xêp chon trưc tiêp

• Gia sư mang đa săp xêp tăng co n phân tư• Chon phân tư nho nhât đôi chô vơi phân tư

thư nhât• Tư n-1 phân tư con lai,ta cung chon ra phân tư

nho nhât,đôi chô cho phân tư thư hai• Tiêp tuc cho đên hêt mang

Page 6: Bài báo cáo

NSN

Page 7: Bài báo cáo

NSNCode

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

}

Page 8: Bài báo cáo

NSNSăp xêp chen trưc tiêp

• Tư phân tư đâu tiên coi như la môt mang mơi co môt phân tư đa co thư tư

• Chen thêm phân tư thư 2 vao trươcnêu nho hơn hoăc sau(nêu lơn hơn) phân tư thư nhât đê co môt mang hai phân tư co thư tư.

• Cư tiêp tuc như thê cho đên hêt• Cuôi cung ta đươc môt mang co thư tư

Page 9: Bài báo cáo

NSN

4 9 1 3 57

Page 10: Bài báo cáo

NSNCode

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

}

Page 11: Bài báo cáo

NSNBubble Sort

• Xet tuân tư tưng căp phân tưmôt tư tư cuôi mang đên đâu mang

• Đôi chô sao cho phân tư nho hơn đưng trươc phân tư con lai

• Lăp lai qua trinh nay cho đên khi không con viêc đô chô hai phân tư

• Khi đo ta se co kêt qua la môt mang đươc săp thư tư

Page 12: Bài báo cáo

NSN

1

4

2

6

3

8

7

5 1

5

7

8

2

4

3

6

1

2

5

7

8

3

4

6

1

2

3

5

7

8

4

6

1

2

3

4

5

7

8

6

1

2

3

4

5

6

7

8

1

2

3

4

5

6

7

8

Page 13: Bài báo cáo

NSNCode

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

}

Page 14: Bài báo cáo

NSN

Heapsort• Giai đoan1:

– Hiêu chinh danh sach đa cho thanh heap đâu tiên– Kêt qua la ta co heap thư nhât va phân tư đâu tiên

cua heap la phân tư co khoa nho nhât• Giai đoan 2:

– B1:Đưa phân tư nho nhât vê cuôi day băng cach hoan vi a[0] va a[n-1]

– B2:Loai bo phân tư ho nhât (phân tư ơ cuôi day) ra khoi day (n=n-1),phân con lai coi như la môt danh sach mơi

– B3:Nêu n>0 thi hiêu chinh danh sach mơi thanh môt heap mơi băng cachxet phân tư đâu tiên x=a[0].Sau khi hoan vi,tai vi tri mơi nêu x con co cac nut con thi ta điêu chinh tiêp.Cư tiêp tuc như thê cho đên khi x ko con nut con,lăp lai bươc1.Nêu n=0,giai thuât kêt thuc

• Ta đươc mang săp theo thư tư giam dân

Page 15: Bài báo cáo

NSN9 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

8 7 6 5 14 9 12 3 2

Heap 3 5 7 6 8 14 9 12 3 2

12 7 6 8 14 9 5 3 2

Heap 4 6 7 9 8 14 12 5 3 2

12 7 9 8 14 6 5 3 2

Heap 5 7 8 9 12 14 6 5 3 2

14 8 9 12 7 6 5 3 2

Heap 6 8 12 9 14 7 6 5 3 2

14 12 9 8 7 6 5 3 2

Heap 7 9 12 14 8 7 6 5 3 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

Page 16: Bài báo cáo

NSNCode

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

}

Page 17: Bài báo cáo

NSNCode

void TaoHeab1DeQui(int a[],int q, int r)

{

if(q<0) return;

Sift1(a,q,r);

q=q-1;

TaoHeab1DeQui(a,q,r);

}

Page 18: Bài báo cáo

NSNCode

void TaoHeab234DeQui(int a[], int r){

if(r<=0) return;Sift1(a,0,r);DoiCho(a[0],a[r]);r--;TaoHeab234DeQui(a,r);

}

Page 19: Bài báo cáo

NSNCode

void HeabSortDeQui(int a[], int n,int q,int r){

TaoHeab1DeQui(a,q,r);DoiCho(a[0],a[r]);r--;TaoHeab234DeQui(a,r);

}

Page 20: Bài báo cáo

NSNCode

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;

}

Page 21: Bài báo cáo

NSNCode

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

}

Page 22: Bài báo cáo

NSN

Tim kiêm

• Tim kiêm tuân tư

• Tim kiêm nhi phân

Page 23: Bài báo cáo

NSN

Tim kiêm tuân tư

• Cho môt mang chưa co thư tư

• Ta băt đâu tim kiêm tư phân tư đâu tiên

• Nêu phân tư nay không phai ta tim đên phân tư kê

• Cư như thê cho đên khi găp phân tư cân tim tim kiêm thanh công

• Hay cho đên khi đi hêt mangkhông tim thây phân tư cân tim

Page 24: Bài báo cáo

NSN

1 6 8 12 3 4 9 5 7

Tim x=3

X=

Tim kiêm thanh công

Tim x=10

Hêt mang không tin thây x=10

Page 25: Bài báo cáo

NSNCode

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;

}

Page 26: Bài báo cáo

NSN

Tim kiêm nhi phân

• Mang đa co thư tư• B1:pham vi tim kiêm ban đâu la toan bô danh sach• B2:Gan ptư x cân tim la ptư chinh giưa goi la y,so

sanh x va y– Nêu x=y:kêt thuc– Nêu x<y thi pham vi tim kiêm mơi la cac phân tư

năm trươc y– Nêu x>y: pham vi tim kiêm la cac [hân tư năm

phia sau y• B3:Nêu tôn tai pham vi tim kiêm mơi,lăp lai bươc

2,ngươc lai,giai thuât kêt thuc,tim kiêm thât bai

Page 27: Bài báo cáo

NSN

3 4 5 7 8 10 13

Tim x=10

10>7

tim thây

Page 28: Bài báo cáo

NSNCode

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;

}

Page 29: Bài báo cáo

The end

Thank you!!!