Tải bản đầy đủ (.doc) (31 trang)

Sáng kiến kinh nghiệm hướng dẫn học sinh giải bài toán sắp xếp tin học 8

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.31 MB, 31 trang )

Hớng
8.
đGiáo ándẫn
Tinhọc
học 9sinh giải bài toán sắp xếp - Tin học
Nguyễn

Nguyễn Thị Lan

H v tờn

: Nguyn Th Lan

Chc v

: Giỏo viờn

Trng

: Trung hc c s Trn Cao

Thị Lan

Tờn ti SKKN:
HNG DN HC SINH GII BI TON SP XP
TIN HC 8.

Phn I. PHN M U
I. T VN
1. Lớ do chn ti
Hin nay trong hu ht cỏc lnh vc h lu tr, qun lý d liu, thao tỏc


tỡm kim thng c thc hin nhiu nht khai thỏc thụng tin mt cỏch
nhanh chúng v chớnh xỏc (vớ d nh: tra cu t in, tỡm sỏch trong th vin,
tra cu thụng tin v nhõn viờn trong mt c quan, tra cu im thi ca mt hc
sinh trong mt trng hc,). t c mc tiờu tỡm kim mt cỏch nhanh
chúng thỡ d liu cn phi c sp xp sn, ngn np, khoa hc theo mt trt
t, mt h thng nht nh.
Khi xõy dng mt h thng qun lý thụng tin trờn mỏy tớnh, bờn cnh cỏc
thut toỏn tỡm kim, cỏc thut toỏn sp xp d liu cng l mt trong cỏc ch
c quan tõm hng u.
Trong khi ú, vi hc sinh bc THCS, vic lp trỡnh gii quyt cỏc bi
toỏn, c bit l cỏc bi toỏn sp xp cũn rt lỳng tỳng, phng phỏp cũn nghốo
nn, thut toỏn cũn n iu, iu ny dn n vic gii quyt cỏc bi toỏn sp
xp cũn rt nhiu hn ch.

Năm học 2014 - 2015
3

Trang:


Hớng
8.
đGiáo ándẫn
Tinhọc
học 9sinh giải bài toán sắp xếp - Tin học
Nguyễn

Thị Lan

Nguyễn Thị Lan

Xut phỏt t thc trng ca vn trờn, sau mt thi gian di tỡm hiu,

nghiờn cu tụi xõy dng chuyờn : Hng dn hc sinh gii bi toỏn sp xp
vi mong mun mang li cho cỏc em mt cỏi nhỡn tng th v bi toỏn sp xp
núi chung, cỏc thut toỏn sp xp núi riờng, t ú cú th tip cn c vi cỏc
bi toỏn qun lý thụng tin sau ny.
2. i tng nghiờn cu v phm vi nghiờn cu
a) i tng nghiờn cu
- Hc sinh lp 8 trng THCS Trn Cao
b) Phm vi nghiờn cu:
Tỡm hiu v vn dng cỏc lý thuyt c bn v mt s phng phỏp sp
xp nh: phng phỏp chn trc tip (Selection Sort), chốn trc tip (Insertion
Sort), sp xp ni bt (Bubble Sort), sp xp kiu vun ng (Heap Sort), sp xp
nhanh (Quick Sort), sp xp vi di bc gim dn (Shell Sort),
p dng i vi:
- Phn: Cõu lnh lp (xỏc nh); Lp vi s ln cha bit trc; Lm vic
vi dóy s; Kiu d liu mng.
- B mụn Tin hc lp 8.
II. PHNG PHP TIN HNH
Chuyờn ch yu s dng cỏc phng phỏp nghiờn cu sau:
- Phng phỏp nghiờn cu lớ lun: Nghiờn cu cỏc vn mang tớnh lớ
lun cú liờn quan n ti (Mun hc tt lp trỡnh phi cú thut toỏn tt, mun
cú thut toỏn tt ũi hi hc sinh phi tip cn vi nhiu dng bi toỏn, nhiu
cỏch gii quyt bi toỏn,...)
- Phng phỏp iu tra: Vi phng phỏp ny tụi tin hnh iu tra hc
sinh bng cỏc phiu trc nghim (ch rừ tớnh ỳng, sai ca thut toỏn, d oỏn
kt qu ca thut toỏn), cỏc bi thc hnh trờn phũng mỏy nm chc trỡnh
nhn thc, k nng thc hnh ca tng i tng hc sinh. Trờn c s ú lm
nn tng i chiu kt qu trc v sau khi thc hin chuyờn .
Năm học 2014 - 2015

4

Trang:


Hớng
8.
đGiáo ándẫn
Tinhọc
học 9sinh giải bài toán sắp xếp - Tin học
Nguyễn

Thị Lan

Nguyễn Thị Lan
- Phng phỏp phng vn: Thụng qua vic trao i trc tip thng thn

vi hc sinh v cỏc bin phỏp giỳp cỏc em thc hnh tt b mụn, tụi ó nhn
c nhng mong mun, nhng bn khon, ..., v c nhng ý kin úng gúp ca
cỏc em. Cng t õy tụi hỡnh thnh nờn cỏc gii phỏp cho chuyờn .
- Phng phỏp to tỡnh hung: Thụng qua cỏc bi tp to tỡnh hung, cỏc
bi tp cú tớnh cht minh chng tụi dn dn dn cỏc em vo vn v hng dn
cỏc em tỡm cỏch gii quyt.
- Phng phỏp quan sỏt, ỏnh giỏ, tng hp: Thụng qua quỏ trỡnh quan sỏt
hc sinh thc hnh, ỏnh giỏ, tng hp kt qu thc hnh giỳp tụi cú gii phỏp
thc hin v iu chnh chuyờn ca mỡnh cho phự hp v cú hiu qu nht.

Phn II. NI DUNG
I. MC TIấU CA TI
- Trỡnh by c ý tng, thut gii (thut toỏn) ca mt s phng phỏp

sp xp thụng dng.
- Gii thiu c Code din t thut gii.
- Mụ t c thut toỏn ca phng phỏp bng vớ d c th.
II. CC GII PHP THC HIN
Mt s thut toỏn sp xp:
1. Sp xp chn trc tip (Selection Sort)
2. Sp xp chốn trc tip (Insertion Sort)
3. Sp xp ni bt (Bubble Sort)
4. Sp xp phõn hoch (Quick Sort)
5. Sp xp vi bc gim dn (Shell Sort)
6. Sp xp vun ng (Heap Sort)
1. Sp xp chn trc tip (Selection Sort)
í tng:
Năm học 2014 - 2015
5

Trang:


Hớng
8.
đGiáo ándẫn
Tinhọc
học 9sinh giải bài toán sắp xếp - Tin học
Nguyễn

Thị Lan

Nguyễn Thị Lan
- Chn phn t nh nht trong n phn t u, a phn t ny v v trớ u


ca dóy. Tip tc quỏ trỡnh vi n-1 phn t cũn li v bt u t v trớ th 2. Lp
li quỏ trỡnh trờn cho dóy gm n-1 phn t cũn li.
- Thut toỏn thc hin n-1 ln ln lt a phn t nh nht trong dóy
hin hnh v v trớ dn u.
Thut toỏn:
u vo:
n s phn t mng
a mng cha cỏc phn t bt k
u ra:
a- mng ó c sp xp tng dn
Bc 1: i = 0
Bc 2: Tỡm phn t a[min] nh nht trong dóy hin hnh t a[i] n a[n-1]
Bc 3: Hoỏn v a[i] vi a[min]
Bc 4:
nu i ngc li thỡ n-1 phn t ó c sp xp => Dng thut toỏn
Ci t (code):

Type mang:array[1..20] of integer;
Function SelectionSort(a:mang, n:integer): integer;
Var i, j, vtmin, tam: integer;
Begin
Writeln(------SAP XEP CHON TRUC TIEP------);
For i1 to n-1 do
Begin
Vtmini;
Năm học 2014 - 2015
6


Trang:


Hớng
8.
đGiáo ándẫn
Tinhọc
học 9sinh giải bài toán sắp xếp - Tin học
Nguyễn

Nguyễn Thị Lan

Thị Lan

For ji+1 to n do
If a[vtmin]>a[j] then vtminj;
{Hoan doi vi tri cua a[i] va a[vtmin]}
Tama[i];
A[i]a[vtmin];
A[vtmin]tam;

End;
Writeln(Day so sau khi sap xep la:);
For i1 to n do Write(a[i],

);

End;

Vớ d minh ha:

Cho dóy s (mng a):
12

2

8

5

1

6

4

15

Yờu cu: Sp xp dóy s tng dn.
Mụ t cỏc bc chy khi thc hin thut toỏn vi dóy trờn:
i=0 => j = 1 ữ 7 v vtmin = 4 => Hoỏn i a[0] v a[4]

Năm học 2014 - 2015
7

Trang:


Hớng
8.
đGiáo ándẫn

Tinhọc
học 9sinh giải bài toán sắp xếp - Tin học
Nguyễn

Nguyễn Thị Lan

Năm học 2014 - 2015
8

Thị Lan

Trang:


Hớng
8.
đGiáo ándẫn
Tinhọc
học 9sinh giải bài toán sắp xếp - Tin học
Nguyễn

Nguyễn Thị Lan

Thị Lan

2. Sp xp chốn trc tip (Insertion Sort)
í tng:
Gi s cú dóy a0, a1,,ai-1 ó c sp xp. í tng ca thut toỏn l
chốn thờm phn t mi ai vo v trớ thớch hp ca on a 1ai-1 sao cho c dóy
mi a1ai ó c sp xp

Năm học 2014 - 2015
9

Trang:


Hớng
8.
đGiáo ándẫn
Tinhọc
học 9sinh giải bài toán sắp xếp - Tin học
Nguyễn

Thị Lan

Nguyễn Thị Lan
Nguyờn tc sp xp nh sau: on gm phn t a0 ó c sp xp, thờm

a1 vo c a0,a1 ó c sp xp, tip tc thờm a 2 vo c a0, a1, a2 ó sp
xptip tc thờm an vo c a0,a1,,an ó sp xp.

Thut toỏn:
u vo:

n s phn t mng
a mng cha cỏc phn t bt k

u ra:

a- mng ó c sp xp tng dn


Bc 1: i=1 //gi s a[0] ó c sp xp
Bc 2: x=a[i], tỡm v trớ pos thớch hp trong on t a[0] n a[i-1] chốn a[i]
vo
Bc 3: i ch cỏc phn t t a[pos] n a[i-1] sang phi mt v trớ c v
trớ chốn a[i] vo
Bc 4: chốn a[i] vo v trớ pos tỡm c bng cỏch gỏn a[pos]=a[i]
Bc 5: i=i+1
Nu i<n => lp li bc 2
Ngc li => Dng thut toỏn
Ci t:

Type mang:array[1..20] of integer;
Function InsertionSort(a:mang, n:integer): integer;
Var i, j, pos, x: integer;
Begin
Writeln(------SAP XEP CHEN TRUC TIEP------);
For i2 to n do
Begin
Xa[i]; {Luu gia tri cua phan tu a[i] de tranh khi de khi roi cho}
Năm học 2014 - 2015
10

Trang:


Hớng
8.
đGiáo ándẫn
Tinhọc

học 9sinh giải bài toán sắp xếp - Tin học
Nguyễn

Nguyễn Thị Lan

Thị Lan

Posi-1;

While (pos >= 1) and (a[pos]>x) do
Begin
A[pos+1]a[pos];
Pospos-1;
End;
A[pos+1]x; {chen x vao day}
End;
Writeln(Day so sau khi sap xep la:);
For i1 to n do Write(a[i],

);

End;
Vớ d minh ha:
Cho dóy s a:
a = 12

2

8


5

1

6

4

15

Sp xp dóy tng dn
Mụ t cỏc bc chy khi thc hin thut toỏn vi dóy trờn:

Năm học 2014 - 2015
11

Trang:


Hớng
8.
đGiáo ándẫn
Tinhọc
học 9sinh giải bài toán sắp xếp - Tin học
Nguyễn

Nguyễn Thị Lan

Năm học 2014 - 2015
12


Thị Lan

Trang:


Hớng
8.
đGiáo ándẫn
Tinhọc
học 9sinh giải bài toán sắp xếp - Tin học
Nguyễn

Nguyễn Thị Lan

Thị Lan

3. Sp xp ni bt (Bubble Sort)
í tng:
Xut phỏt t u dóy hay cui dóy v tin hnh i ch cp phn t k
cn nhau a phn t nh hn hoc ln hn v v trớ cao nht hay thp nht
trong dóy. Sau khi ó chuyn v tjrớ ny khụng xột na => Lp li quỏ trỡnh ny
khi dóy khụng cũn phn t no na
Thut toỏn:
Bc 1: i = 0
Bc 2: j = n-1 //duyt t cui n pt th i
Trong khi j>i thc hin
nu a[j] < a[j-1] thỡ hoỏn i hai phn t
j=j-1
Bc 3: i=i+1

Nu i>=n-1 => Ht dóy v dng thut toỏn
Năm học 2014 - 2015
13

Trang:


Hớng
8.
đGiáo ándẫn
Tinhọc
học 9sinh giải bài toán sắp xếp - Tin học
Nguyễn

Nguyễn Thị Lan
Ngc li lp li bc 2

Thị Lan

Ci t:

Type mang = array[1..20] of integer;
Function BubbleSort(a:mang, n:integer): integer;
Var i, j, tg: integer;
Begin
Writeln(----SAP XEP NOI BOT ----);
For i1 to n do
For jn downto i+1 do
If a[j]Begin

Tga[j];
A[j]a[j-1];
A[j-1]tg;
End;
End;
Vớ d minh ha:
Cho dóy s a:
a=

2

12

8

5

1

6

4

15

Yờu cu: Sp xp dóy tng dn

Năm học 2014 - 2015
14


Trang:


Hớng
8.
đGiáo ándẫn
Tinhọc
học 9sinh giải bài toán sắp xếp - Tin học
Nguyễn

Nguyễn Thị Lan

Năm học 2014 - 2015
15

Thị Lan

Trang:


Hớng
8.
đGiáo ándẫn
Tinhọc
học 9sinh giải bài toán sắp xếp - Tin học
Nguyễn

Nguyễn Thị Lan

Năm học 2014 - 2015

16

Thị Lan

Trang:


Hớng
8.
đGiáo ándẫn
Tinhọc
học 9sinh giải bài toán sắp xếp - Tin học
Nguyễn

Nguyễn Thị Lan

Thị Lan

4. Sp xp da trờn phõn hoch Quick Sort
í tng:
+ Phõn hoch dóy a1 a2 an thnh 3 thnh phn :
- Dóy con 1 : Gm cỏc phn t a1 ai cú giỏ tr khụng ln hn x.(- Dóy con 2 : Gm cỏc phn t aj an cú giỏ tr khụng nh hn x.(>x)
- Dóy con 3: ai,..aj=x
+ Vi x l giỏ tr ca mt phn t tu ý trong dóy ban u.
+ Sau khi phõn hoch, dóy ban u c chia lm 3 phn :
ak < x, vI k=1..i
ak = x, vI k=i..j
ak > x, vI k=j..N
Thut toỏn:

Gii thut sp xp mt dóy alar
Bc 1 : Phõn hoch dy alar thnh cỏc dóy con :
Dóy con 1 : alaj < x
Dóy con 2 : aj+1ai-1 = x
Năm học 2014 - 2015
17

Trang:


Hớng
8.
đGiáo ándẫn
Tinhọc
học 9sinh giải bài toán sắp xếp - Tin học
Nguyễn


Nguyễn Thị Lan
Dóy con 3 : aiar > x

Thị Lan

Bc 2 :
Nu (l Nu (i
Gii thut phõn hoch mt dóy alar thnh 2 dóy con:
Bc 1 : Chn tu ý a[k] lm giỏ tr mc l<=k<=r
X = a[k]; i=l, j=r

Bc 2 : Phỏt hin v hiu chnh cp phn t a[i], a[j] nm sai ch:
Bc 2a :

Trong khi a[i]
Bc 2b :

Trong khi a[j]>x j--;

Bc 2c :

Nu i
Bc 3 :
Nu iNu i>=j : dng.

Ci t:

Type mang = array[1..20] of integer;
{----- Ham hoan vi gia tri hai bien-----}
Function Hoanvi(x,y:integer):integer;
Var tam:integer;
Begin
Tamx;
Xy;
Năm học 2014 - 2015
18

Trang:



Hớng
8.
đGiáo ándẫn
Tinhọc
học 9sinh giải bài toán sắp xếp - Tin học
Nguyễn
Ytam;

Nguyễn Thị Lan

Thị Lan

End;
{------------------Ham QuickSort---------------}
Function QuickSort(a:mang; l,r:integer):integer;
Var I, j, x, n:integer;
Begin
Writeln(------SAP XEP PHAN HOACH------);
Xa[(l+r) div 2];
Il;
Jr;
Repeat
While a[i]While a[j]>x do dec(j);
If (i<=j) then
Begin
Hoanvi(a[i],a[j]);
Inc(i);

Dec(j);
End;
Until (iIf (lIf (iEnd;
Vớ d minh ha:
Cho dóy s: 12

2

8

5

1

6

4

15

Yờu cu: Sp xp tng dn.
Năm học 2014 - 2015
19

Trang:



Hớng
8.
đGiáo ándẫn
Tinhọc
học 9sinh giải bài toán sắp xếp - Tin học
Nguyễn

Nguyễn Thị Lan
Mụ t cỏc bc ca thut toỏn:

Thị Lan

Phõn hoch on l=1; r=8; x=a[4]=5
1
2

2

8

5

1
E

6

4

1

5
r=8

l=1
4

2

1

5

8
E

6

1
2

1
5

5

8
E

6


1
2

1
5

5

8
E

6

1
2

1
5

Phõn hoch on l=1; r=3; x=a[2]=2
4

2

l=1

1
r=3

1


2

4

Phõn hoch on l=5; r=8; x=a[6]=6
1

2

4

5

8
E

6

1
2

l=5

1

2

4


5

6

1
5
r=8

8

1
2

1
5

8

1
2

1
5

Phõn hoch on l=7; r=8; x=a[7]=12
1

2

4


5

6

l=7
Năm học 2014 - 2015
20 1
2
4

r=8
Trang:

5

6

8

1
2

1
5


Hớng
8.
đGiáo ándẫn

Tinhọc
học 9sinh giải bài toán sắp xếp - Tin học
Nguyễn

Nguyễn Thị Lan

Thị Lan

Dng
5. Sp xp vi bc gim dn (Shell Sort)
í tng:
Da trờn ý tng sp xp theo phng phỏp chốn
- Phõn chia dóy ban u thnh nhng dóy con cỏc phn t cỏch nhau h v trớ
- Dóy ban u : a1 a2 an c xem nh s xen k cỏc dóy con sau :
- Dóy con th nht : a1 ah+1 a2h+1
- Dóy con th hai : a2 ah+2 a2h+2
.
- Dóy con th h

: ah a2h a3h

Gii thut:
Bc 1 : Chn k khong cỏch h[1], h[2],,h[k] v i=1.
Bc 2 : Phõn chia dóy ban u thnh cỏc dóy con cỏch nhau h[i] khong
cỏch. Sp xp tng dóy con bng phng phỏp chốn trc tip.
Bc 3 : i=i+1;
Nu i>k : dng.
Nu i<=k : lp li bc 2.

Ci t:

Gi s chn c dóy di h[1], h[2],,h[k],

Procedure ShellSort (a: mang, n:integer, h:mang, k: integer);
Var

step, i, j, x, len: integer;

Năm học 2014 - 2015
21

Trang:


Hớng
8.
đGiáo ándẫn
Tinhọc
học 9sinh giải bài toán sắp xếp - Tin học
Nguyễn
Begin

Nguyễn Thị Lan

Thị Lan

for step:=0 to k-1 do
Begin
Len:=h[step];
for i:=len to n-1 do
Begin

X:=a[i];
J:=i-len;
while (x<a[j]) and (j>-1)do //sp xp dóy con cha x
Begin {bng phng phỏp chốn trc tip}
a[j+len]:=a[j];
j:=j-len;
End;
a[j+len]:=x;
End;
End;
End;


6. Sp xp vun ng (Heap Sort)
nh ngha Heap:
- Gi s sp xp gim dn, khi ú Heap c nh ngha l mt dóy cỏc phn t
a1, a2, ..., an tha cỏc quan h :
Năm học 2014 - 2015
22

Trang:


Hớng
8.
đGiáo ándẫn
Tinhọc
học 9sinh giải bài toán sắp xếp - Tin học
Nguyễn


Nguyễn Thị Lan
ai <= a2i.

Thị Lan

ai <= a2i+1
{(ai, a2i), (ai, a2i+1) l cỏc cp phn t liờn i}
- V cú cỏc tớnh cht sau :
Tớnh cht 1: Phn t a1 (u Heap) luụn l phn t nh nht trong
Heap
Tớnh cht 2: Ct b mt s phn t v phớa phi ca Heap thỡ dóy
con cũn li vn l mt Heap.
Vớ d:

Thut toỏn:
Gii thut Heapsort tri qua 2 giai on:
- Giai on 1:Hiu chnh dóy s ban u thnh heap;
- Giai on 2:Sp xp dóy s da trờn heap:
Bc 1: éa phn t nh nht v v trớ ỳng cui dóy.
Hoỏn v(a1,aN);
Bc 2:Loi b phn t nh nht ra khi dóy:
N = N-1;
Năm học 2014 - 2015
23

Trang:


Hớng
8.

đGiáo ándẫn
Tinhọc
học 9sinh giải bài toán sắp xếp - Tin học
Nguyễn

Thị Lan

Nguyễn
Thị Lan
Hiu chnh phn cũn li ca dóy t a1, a2,, an thnh mt

heap.
Bc 3: Nu N > 1 (heap cũn phn t ): lp li bc 1.
Ngc li: Dng

Năm học 2014 - 2015
24

Trang:


Hớng
8.
đGiáo ándẫn
Tinhọc
học 9sinh giải bài toán sắp xếp - Tin học
Nguyễn

Nguyễn Thị Lan


Năm học 2014 - 2015
25

Thị Lan

Trang:


Hớng
8.
đGiáo ándẫn
Tinhọc
học 9sinh giải bài toán sắp xếp - Tin học
Nguyễn

Nguyễn Thị Lan

Thị Lan

* Ci t:

Type mang = array[1..20] of integer;
{----Th tc h tr----}
Procedure Shift(a: mang; l,r: integer);
Var

x, i, j, cont: integer;
I: = l; j: = 2*i+1;
cont : = 1;


//(ai,aj),(ai,aj+1)l cỏc phn t liờn i

x: = a[i ];
while ((j<=r) and (cont)) do
Begin
If (j
{nu cú 2 phn t liờn i}

If (a[j]>a[j+1) then {xỏc nh phn t liờn i nh nht a[j]}
J:=j+1;
{tha quan h liờn i ,dng hiu chnh}
if (a[j]>x) then
cont: = 0
Năm học 2014 - 2015
26

Trang:


Hớng
8.
đGiáo ándẫn
Tinhọc
học 9sinh giải bài toán sắp xếp - Tin học
Nguyễn

Nguyễn
Thị Lan
else


Thị Lan

Begin
hoanv(a[i],a[j]);
i: = j;

{xột tip kh nng hiu chnh lan truyn}

j:=2*i+1;
End;
End;
End;
Th tc hiu chnh dóy ban u a[1], a[2],, a[n] thnh Heap:
Procedure CreateHeap(a:mang, n:integer);
Var i:integer;
Begin
i := n div 2;
while (i > 0) do
Begin
Dec(i);
Shift(a,i,n-1);
End;
Sp xp dóy a[1], a[2], ,a[n] bng Heap.
void Heapsort(float a[ ],int N)
Var r: integer;
Begin
r := n-1;
Năm học 2014 - 2015
27


Trang:


×