You are on page 1of 103

Sp xp - Sorting

Trnh by cc thut ton thng dng cho vic sp xp ni (sp xp trn b nh trong - Mng) Minh ha cc thut ton nh gi thut ton

Spring 2009

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Ni dung trnh by
Thut ton Selection sort Thut ton Insertion sort Thut ton Shell sort Thut ton Heap sort Thut ton Merge sort Thut ton Quick sort

Spring 2009

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Sp xp 1 mng cc s nguyn
Gi s c 1 mng gm 6 s nguyn. Ta cn sp xp cc phn t ca mng theo th t tng dn

70 60 50 40 30 20 10 0 [1] [0] [2] [1] [3] [2] [4] [3] [5] [4] [6] [5]
3

Spring 2009

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Thut ton Chn trc tip (Selection sort Algorithm)


Bt u bng cch tm 70 phn t nh 60 nht 50
40 30 20 10 0 [1] [0]
Spring 2009

[2] [1]

[3] [2]

[4] [3]

[5] [4]

[6] [5]
4

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Selection sort Algorithm


Hon v phn t nh nht tm c vi phn t u tin ca mng

70 60 50 40 30 20 10 0 [1] [0] [2] [1] [3] [2] [4] [3] [5] [4] [6] [5]
5

Spring 2009

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Selection sort Algorithm


Phn sp
70

Phn cha sp

1 phn ca 60 mng 50 c sp xp 40
30 20 10 0 [1] [0]
Spring 2009

[2] [1]

[3] [2]

[4] [3]

[5] [4]

[6] [5]
6

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Selection sort Algorithm


Phn sp
70

Phn cha sp

Tm phn t 60 nh nht 50 trong phn 40 cha c 30 sp 20


10 0 [1] [0]
Spring 2009

[2] [1]

[3] [2]

[4] [3]

[5] [4]

[6] [5]
7

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Selection sort Algorithm


Phn sp
70

Phn cha sp

Hon v phn t nh nht trong phn cha c sp vi phn t u tin trong phn ny
Spring 2009

60 50 40 30 20 10 0 [1] [0] [2] [1] [3] [2] [4] [3] [5] [4] [6] [5]
8

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Selection sort Algorithm


Phn sp
70

Phn cha sp

Phn 60 c sp xp 50 ca mng 40 c tng 30 thm 1 phn 20 t


10 0 [1] [0]
Spring 2009

[2] [1]

[3] [2]

[4] [3]

[5] [4]

[6] [5]
9

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Selection sort Algorithm


Phn sp
70

Phn cha sp

Tip tc tng t ...

60 50 40 30 20 10 0 [1] [0] [2] [1] [3] [2] [4] [3] [5] [4] [6] [5]
10

Phn t

nh nht

Spring 2009

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Selection sort Algorithm


Phn sp
70

Phn cha sp

Tip tc tng t ...

60 50 40 30 20 10 0 [1] [0] [2] [1] [3] [2] [4] [3] [5] [4] [6] [5]
11

Spring 2009

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Selection sort Algorithm


Phn sp

tng thm
70

Phn sp

Phn cha sp

Tip tc tng t ...

60 50 40 30 20 10 0 [1] [0] [2] [1] [3] [2] [4] [3] [5] [4] [6] [5]
12

Spring 2009

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Selection sort Algorithm


Qu trnh ln lt thm tng phn t vo phn sp Phn sp cha cc phn t nh nht, sp tng dn
Phn sp
70 60 50 40 30 20 10 0 [1] [0]
Spring 2009

Phn cha sp

[2] [1]

[3] [2]

[4] [3]

[5] [4]

[6] [5]
13

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Selection sort Algorithm


Thut ton dng khi ch cn 1 phn t ( l phn t ln nht).
Phn sp
70 60 50 40 30 20 10 0 [1] [0]
Spring 2009

Phn cha

[2] [1]

[3] [2]

[4] [3]

[5] [4]

[6] [5]
14

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Selection sort Algorithm


Ton b mng c sp th 70 t. 60 Tng qut: chn 50 phn t nh nht 40 v a n v v 30 tr u ca phn 20 cha c sp 10 trong mng. 0
[1] [0]
Spring 2009

[2] [1]

[3] [2]

[4] [3]

[5] [4]

[6] [5]
15

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Selection sort Algorithm (Minh ha chng trnh)


void SelectionSort (int a[ ], int n ) { int min; // v tr ca phn t nh nht (trong phn cha sp) int tmp; // bin tm dng khi hon v for (int i = 0; i < n; i++ ) { // tm phn t nh nht trong phn cha sp min = i; for (int j = i + 1; j < n; j++) if (a[j] < a[min] ) min = j; // hon v phn t nh nht c tm thy vi phn t u if (a[min] < a[i]) { tmp = a[i]; a[i] = a[min]; a[min] = tmp; } } // end of for i }
Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 16

nh gi thut ton (Selection sort Algorithm)


Trong mi trng hp, s php so snh l: (n-1) + (n-2) + + 1 = n(n-1)/2 = O(n2) S php hon v:
Trng hp xu nht: O(n) Trng hp tt nht (mng sp t t tng dn): 0
Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 17

Thut ton Chn trc tip (Insertion sort Algorithm)


Thut ton Chn trc tip cng chia mng thnh 2 phn: phn c sp v phn cha c sp
Spring 2009

70 60 50 40 30 20 10 0 [1] [0] [2] [1] [3] [2] [4] [3] [5] [4] [6] [5]
18

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Insertion sort Algorithm


Phn sp Phn cha sp

Phn sp lc u ch c 1 phn t u tin ca mng (khng cn thit l phn t nh nht)


Spring 2009

70 60 50 40 30 20 10 0 [1] [0] [2] [1] [3] [2] [4] [3] [5] [4] [6] [5]
19

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Insertion sort Algorithm


Phn sp Phn cha sp
70 60 50 40 30 20 10 0 [1] [0] [2] [1] [3] [2] [4] [3] [5] [4] [6] [5]
20

M rng phn sp bng cch thm vo phn t u tin trong phn cha c sp
Spring 2009

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Insertion sort Algorithm


Phn sp Phn cha sp

...v t n vo v tr thch hp, sao cho phn sp vn gi nguyn tnh th t (tng dn).
Spring 2009

70 60 50 40 30 20 10 0 [1] [0] [2] [1] [3] [2] [4] [3] [5] [4] [6] [5]
21

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Insertion sort Algorithm


Phn sp Phn cha sp

Trong v d ny, phn t mi c t vo v tr u ca phn sp.

70 60 50 40 30 20 10 0 [1] [0] [2] [1] [3] [2] [4] [3] [5] [4] [6] [5]
22

Spring 2009

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Insertion sort Algorithm


Phn sp Phn cha sp

i khi chng ta gp may, phn t mi khng cn phi di chuyn.

70 60 50 40 30 20 10 0 [1] [0] [2] [1] [3] [2] [4] [3] [5] [4] [6] [5]
23

Spring 2009

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Insertion sort Algorithm


Phn sp Phn cha sp

v li gp may thm 1 ln na..

70 60 50 40 30 20 10 0 [1] [0] [2] [1] [3] [2] [4] [3] [5] [4] [6] [5]
24

Spring 2009

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Insertion sort Algorithm


Lm sao chn 1 phn t ? Copy phn t mi vo 1 bin trung gian
Phn sp
70 60 50 40 30 20 10 0 [1] [0]
Spring 2009

Phn cha sp

[2] [1]

[3] [2]

[4] [3]

[5] [4]

[6] [5]
25

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Insertion sort Algorithm


Lm sao chn 1 phn t ? Dch chuyn cc phn t trong phn sp sang phi

70 60 50 40 30 20 10 0 [1] [0] [2] [1] [3] [2] [4] [3] [5] [4] [6] [5]
26

Spring 2009

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Insertion sort Algorithm


Lm sao chn 1 phn t ? to 1 ch trng cho phn t mi

70 60 50 40 30 20 10 0 [1] [0] [2] [1] [3] [2] [4] [3] [5] [4] [6] [5]
27

Spring 2009

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Insertion sort Algorithm


Lm sao chn 1 phn t ? tip tc dch chuyn cc phn t...

70 60 50 40 30 20 10 0 [1] [0] [2] [1] [3] [2] [4] [3] [5] [4] [6] [5]
28

Spring 2009

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Insertion sort Algorithm


Lm sao chn 1 phn t ? tip tc dch chuyn cc phn t...

70 60 50 40 30 20 10 0 [1] [0] [2] [1] [3] [2] [4] [3] [5] [4] [6] [5]
29

Spring 2009

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Insertion sort Algorithm


Lm sao chn 1 phn t ? ...cho n khi tm thy v tr thch hp cho phn t mi...

70 60 50 40 30 20 10 0 [1] [0] [2] [1] [3] [2] [4] [3] [5] [4] [6] [5]
30

Spring 2009

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Insertion sort Algorithm


Lm sao chn 1 phn t ? Copy phn t mi vo li mng, ti v tr ny.
Phn sp
70 60 50 40 30 20 10 0 [1] [0]
Spring 2009

Phn cha

[2] [1]

[3] [2]

[4] [3]

[5] [4]

[6] [5]
31

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Insertion sort Algorithm


Lm sao chn 1 phn t ? Phn t cui cng cng phi chn. Copy n vo 1 bin trung gian...
Phn sp
70 60 50 40 30 20 10 0 [1] [0]
Spring 2009

Phn cha

[2] [1]

[3] [2]

[4] [3]

[5] [4]

[6] [5]
32

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Insertion sort Algorithm


Cu hi ? C bao nhiu php dch chuyn xy ra ?

70 60 50 40 30 20 10 0 [1] [0] [2] [1] [3] [2] [4] [3] [5] [4] [6] [5]
33

Spring 2009

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Insertion sort Algorithm


Cu hi ? C 4 php dch chuyn

70 60 50 40 30 20 10 0 [1] [0] [2] [1] [3] [2] [4] [3] [5] [4] [6] [5]
34

Spring 2009

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Insertion sort Algorithm


Copy phn t tr li mng.

70 60 50 40 30 20 10 0 [1] [0] [2] [1] [3] [2] [4] [3] [5] [4] [6] [5]
35

Spring 2009

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Insertion sort Algorithm (Minh ha chng trnh)


void InsertionSort (int a[ ], int n) { int saved; // bin trung gian lu li gi tr phn t cn chn for (int i = 1; i < n; i++ ) { saved = a[i]; // lu li gi tr phn t cn chn // dch chuyn cc phn t trong phn sp sang phi for (int j = i; j > 0 && saved < a[j-1]; j--) a[j] = a[j-1]; a[j] = saved; // chn phn t vo ng v tr } // end of for i }
Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 36

nh gi thut ton (Insertion sort Algorithm)


Trng hp xu nht c: 1 + 2 + 3 + + (n-1) = n(n-1)/2 = O(n2) php so snh v dch chuyn Trng hp tt nht (mng c th t tng dn): O(n) php so snh v 0 php dch chuyn
Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 37

Nhn xt chung (Selection & Insertion sort)


Chn trc tip v Chn trc tip u c chi ph cho trng hp xu nht l O(n2) Do , khng thch hp cho vic sp xp cc

mng ln D ci t, d kim li Chn trc tip tt hn Chn trc tip, nht l khi mng c th t sn Cn c nhng thut ton hiu qu hn cho vic sp xp cc mng ln
Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 38

Thut ton Shell sort (Shell sort Algorithm)


c xut vo nm 1959 bi Donald Shell trn tp ch Communication of the ACM Thut ton ny ci tin hiu qu ca thut ton Chn trc tip Ph v ro cn chi ph O(n2) ca nhng thut ton sp xp trc
Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 39

Shell sort Algorithm


tng:
Chia dy ban u thnh h dy con a0, a0+h, a0+2h, a1, a1+h, a1+2h, a2, a2+h, a2+2h, Sp xp tng dy con bng cch s dng phng php Chn trc tip
Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 40

Shell sort Algorithm


0 1 2 3 4 5 6 7 8 Index Ban u 81 94 11 96 12 35 17 95 28 9 10 11 12

58

41

75

15

Chia dy thnh h=5 dy con Index h=5


0 1 2 3 4 5 6 7 8 9 10 11 12

81 94 11 96 12 35 17 95 28

58

41

75

15

Sp xp 5 dy con bng phng php Chn trc tip Index h=5


Spring 2009

10

11

12

35 17 11 28 12 41 75 15 96

58

81

94

95
41

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Shell sort Algorithm


Chia dy thnh h=3 dy con Index h=3
0 1 2 3 4 5 6 7 8 9 10 11 12

35 17 11 28 12 41 75 15 96

58

81

94

95

Sp xp 3 dy con bng phng php Chn trc tip Index h=3


0 1 2 3 4 5 6 7 8 9 10 11 12

28 12 11 35 15 41 58 17 94

75

81

96

95

Spring 2009

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

42

Shell sort Algorithm


Chia dy thnh h=1 dy con Index h=1
0 1 2 3 4 5 6 7 8 9 10 11 12

28 12 11 35 15 41 58 17 94

75

81

96

95

Sp xp 1 dy con bng phng php Chn trc tip Index h=1


0 1 2 3 4 5 6 7 8 9 10 11 12

11 12 15 17 28 35 41 58 75

81

94

95

96

Kt thc !
Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 43

Shell sort Algorithm


Thut ton s dng 1 dy hk: h1, h2, h3, , ht (*) Tnh cht dy hk:
hi > hi+1 (dy gim dn) ht = 1

Dy hk gi l dy gia s (Increment sequence), dng to lp cc dy con trong mng ban u Trong v d: h1 = 5, h2 = 3, h3 = 1


Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 44

Shell sort Algorithm


Vn : La chn dy gia s hk nh th no ?
Mi dy hk tho mn tnh cht (*) u chp nhn c; Tuy nhin, cho n nay, ngi ta ch c th ch ra rng dy hk ny tt hn dy hk kia, ch khng th xc nh c dy no l tt nht

Chi ph c a thu t ton Shell sort ph th c vo 2 v n chnh l:


Cch thc xy dng dy hk D liu nhp
Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 45

Shell sort Algorithm


Cc chin lc xy dng dy hk c kho st:
D.Shell (1959): h1 = [n/2], hi+1 = [hi/2], ht = 1 T.H.Hibbard (1963): 1, 3, 7, 15, . , 2k-1 (k *) N* = N \ {0} = { 1, 2, 3, 4, .} Knuth: h1 = 1, hi = hi-1* 3 +1, v dng tai i = log2n- 1 1, 4, 13, 40, 121, .... Pratt (1979): 1, 2, 3, 4, 6, 8, 9, 12, 16, ..., 2p3q, (vi p, q N)
Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 46

Shell sort Algorithm (Minh ha chng trnh)


void ShellSort(int h[], int a[], int t, int n) { for (int k=0; k<t; k++) { int increment = h[k]; for (int i=increment; i<n; i++) { int saved = a[i]; for (int j=i; j>=increment && saved<a[j-increment]; j-=increment) a[j] = a[j-increment]; a[j] = saved; } } }
Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 47

nh gi thut ton (Shell sort Algorithm)


Vic phn tch gii thut ny t ra nhng vn ton hc ht sc phc tp m trong c 1 s vn n nay vn cha c gii quyt Ng i ta vn cha bit chn dy hk nh th no l ph hp cho ra kt qu tt nht Mt s kt qu chng minh:
Shell sort vi dy hk ca Donald Shell c s php gn trong tr ng h p x u nh t l O(n2) S dng dy hk ca Hibbard cn dng O(n3/2) php gn Chi ph khi dng dy hk ca Pratt l O(n(log2n)2)
Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 48

Thut ton Sp xp cy (Heap sort Algorithm)


c xut vo nm 1964 bi J.W.J. Williams trn tp ch Communication of the ACM y l thut ton sp xp chm nht trong s cc thut ton c phc tp O(n*log2n) Nhng n li t c u im v tnh n gin ca ci t khng i hi vng qui phc tp nh ca Quicksort v khng s dng mng ph nh Mergesort

Spring 2009

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

49

Heap sort Algorithm Ni dung


nh ngha Heap Biu din Heap bng mng (array) Thao tc c bn trn Heap Thut ton Heap sort nh gi thut ton

Spring 2009

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

50

Heap sort Algorithm nh ngha Heap


45

Heap l mt cy nh phn y
27 19

35 21 22

23 4

M i nt trong Heap ch a m t gi tr c th so snh v i gi tr c a nt khc


51

Spring 2009

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Heap sort Algorithm nh ngha Heap


45

Heap l mt cy nh phn y
27 19

35 21 22

23 4

c i m c a Heap l gi tr c a m i nt >= gi tr c a cc nt con c a n


52

Spring 2009

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Heap sort Algorithm nh ngha Heap


Heap l mt cy nh phn tha cc tnh cht sau sau:
L mt cy y ; Gi tr ca mi nt khng bao gi b hn gi tr ca cc nt con

H qu:
Nt ln nht l ?

Spring 2009

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

53

Heap sort Algorithm Biu din Heap bng mng


42

Ta s lu gi tr ca cc nt trong mt array
27

35 21

23

Spring 2009

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

54

Heap sort Algorithm Biu din Heap bng mng


Gi tr ca nt gc s v tr u tin ca array
27 42

35 21

23

42
Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 55

Heap sort Algorithm Biu din Heap bng mng


Gi tr ca hai nt con ca gc c in vo hai v tr tip theo
27 42

35 21

23

42
Spring 2009

35

23
56

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Heap sort Algorithm Biu din Heap bng mng


Gi tr ca hai nt hng k tip s tun t c lu li ti hai v tr tip sau Th t lu tr trn mng c thc hin t tri sang phi
42
Spring 2009

42

35 27 21

23

35

23

27

21
57

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Heap sort Algorithm Biu din Heap bng mng


Lin kt gia cc nt c 42 hiu ngm, khng trc tip dng con tr. 35 Array c xem l cy ch do cch ta x l d liu 27 21 trn

23

42
Spring 2009

35

23

27

21
58

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Heap sort Algorithm Biu din Heap bng mng


Nu ta bit c ch s ca 1 phn t trn mng, ta s d dng xc nh c ch s ca nt cha v (cc) nt con ca n.
27 42

35 21

23

42 [0]
Spring 2009

35 [1]

23 [2]

27 [3]

21 [4]
59

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Heap sort Algorithm Biu din Heap bng mng


Nt gc ch s [0] Nt cha ca nt [i] c ch s l [(i-1)/2] Cc nt con ca nt [i] (nu c) c ch s [2i+1] v [2i+2] V d:
Nt con ca nt [0] l nt [1] v nt [2] Nt cha ca nt [7] l nt [3] Nt cha ca nt [8] l nt [3]
Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 60

Heap sort Algorithm Thao tc c bn trn Heap


Heapify - iu chnh 1 phn t
Nt ang xt c gi tr l 27, b hn gi tr ca nt con ca n Tin hnh i ch vi nt con c gi tr ln nht 34 42

27 35 28 21 22

23 4

Spring 2009

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

61

Heap sort Algorithm Thao tc c bn trn Heap


Heapify - iu chnh 1 phn t
Nt ang xt c gi tr l 27, b hn gi tr ca nt con ca n Tin hnh i ch vi nt con c gi tr ln nht 34 42

35 27 28 21 22

23 4

Spring 2009

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

62

Heap sort Algorithm Thao tc c bn trn Heap


Heapify - iu chnh 1 phn t Hon tt !
35 34 27 28 21 22 42

23 4

Spring 2009

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

63

Heap sort Algorithm Thao tc c bn trn Heap


void Heapify(int a[], int n, int i) // iu chnh phn t a[i] { int saved = a[i]; // lu li gi tr ca nt i while (i < n/2) { // a[i] khng phi l nt l int child = 2*i + 1; // nt con bn tri ca a[i] if (child < n-1) if (a[child] < a[child+1]) child ++; if (saved >= a[child]) break; a[i] = a[child]; i = child; } a[i] = saved; // Gn gi tr ca nt i vo v tr mi }
Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 64

Heap sort Algorithm Thut ton Heap sort


Xy dng Heap: S dng thao tc Heapify chuyn i mt mng bnh thng thnh Heap Sp xp:
Hon v phn t cui cng ca Heap vi phn t u tin ca Heap (c gi tr ln nht) Loi b phn t cui cng Thc hin thao tc Heapify iu chnh phn t u tin
Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 65

Heap sort Algorithm Thut ton Heap sort - Xy dng Heap


Tt c cc phn t trn mng c ch s [n/2] n [n-1] u l nt l Mi nt l c xem l Heap c mt phn t Thc hin thao tc Heapify trn cc phn t c ch s t [n/2]-1 n [0]

Spring 2009

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

66

Heap sort Algorithm Thut ton Heap sort - Xy dng Heap


Thc hin Heapify vi tt c cc nt khng phi l l Theo th t t tri sang phi
14 20 12 23 14 17 20

12 17

23

Cc nt l
Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 67

Heap sort Algorithm Thut ton Heap sort - Xy dng Heap


// Xy dng mng bnh thng a tr thnh // mt Heap void BuildHeap(int a[], int n) { for (int i = n/2 - 1; i >= 0; i--) Heapify(a, n, i); }
Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 68

Heap sort Algorithm Thut ton Heap sort - Sp xp


void HeapSort(int a[], int n) { BuildHeap(a, n); for (int i=n-1; i>=0; i--) { Hon v a[0] vi a[i] Heapify(a, i, 0); } }
Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 69

nh gi thut ton (Heap sort Algorithm)


Heap sort lun c phc tp l O(n* log2n) Quick sort thng c phc tp l O(n* log2n) nhng trng hp xu nht li c phc tp O(n2) Nhn chung Quick sort nhanh hn Heap sort 2 ln nhng Heap sort li c n nh cao trong mi trng hp
Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 70

Thut ton Sp xp trn (Merge sort Algorithm)


L mt phhg php sp xp dng Chia tr (Divide and Conquer) Nguyn tc Chia tr:
Nu vn nh th x l ngay Nu vn ln: chia thnh 2 vn nh, mi phn bng Gii quyt tng vn nh Kt hp kt qu ca nhng vn nh li vi nhau
Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 71

Merge sort Algorithm


tng:
Chia dy cn sp thnh 2 phn, v tr gia Nu s phn t ca mi phn > 1 th
Sp sp mi phn bng Merge sort

Trn 2 phn c sp li vi nhau

Thut ton Merge sort c th ci t bng qui


Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 72

Merge sort Algorithm


V d:
16 12 7 6 3 2 18 10

2
Spring 2009

10 12 16 18
73

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Merge sort Algorithm


V d:
Chia

16 12 7 16 12 7 6

3 3

2 2

18 10 18 10

Spring 2009

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

74

Merge sort Algorithm


V d:
Chia Chia

16 12 7 16 12 7 16 12 7 6 6

3 3 3

2 2 2

18 10 18 10 18 10

Spring 2009

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

75

Merge sort Algorithm


V d:
Chia Chia Chia

16 12 7 16 12 7 16 12
16 12

6 6 6
6

3 3 3
3

2 2 2
2

18 10 18 10 18 10
18 10

7
7

Spring 2009

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

76

Merge sort Algorithm


V d:
Chia Chia Chia Tr n

16 12 7 16 12 7 16 12
16 12

6 6 6
6

3 3 3
3

2 2 2
2

18 10 18 10 18 10
18 10

7
7

12 16

10 18

Spring 2009

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

77

Merge sort Algorithm


V d:
Chia Chia Chia Tr n Tr n
Spring 2009

16 12 7 16 12 7 16 12
16 12

6 6 6
6

3 3 3
3

2 2 2
2

18 10 18 10 18 10
18 10

7
7

12 16 6 7

2 2

3 3

10 18 10 18
78

12 16

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Merge sort Algorithm


V d:
Chia Chia Chia Tr n Tr n Tr n
Spring 2009

16 12 7 16 12 7 16 12 16 12 7 7 6 6 6 6 7

3 3 3 3 2 2

2 2 2 2 3 3

18 10 18 10 18 10 18 10

12 16 6 2 7 3

10 18 10 18

12 16 6 7

10 12 16 18
79

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Merge sort Algorithm (Minh ha chng trnh)


void MergeSort(int a[], int Left, int Right) { int Mid; // V tr ca phn t gia if (Left < Right) { // Dy c > 1 phn t Mid = (Left + Right)/2; // Chia thnh 2 dy MergeSort(a, Left, Mid); // Trn dy bn tri MergeSort(a, Mid+1, Right); // Trn dy bn phi // Trn 2 dy li vi nhau Merge(a, Left, Mid, Right); } } // end of MergeSort
Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 80

Merge sort Algorithm Thao tc trn


Hai dy con s p

12 16 2

10 18

[0] [1] [2] [3] [4] [5] [6] [7] c1 B ng t m c2

[0] [1] [2] [3] [4] [5] [6] [7] d


Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 81

Merge sort Algorithm Thao tc trn


Hai dy con s p

12 16 2

10 18

[0] [1] [2] [3] [4] [5] [6] [7] c1 B ng t m c2

[0] [1] [2] [3] [4] [5] [6] [7] d


Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 82

Merge sort Algorithm Thao tc trn


Hai dy con s p

12 16 2

10 18

[0] [1] [2] [3] [4] [5] [6] [7] c1 B ng t m c2

[0] [1] [2] [3] [4] [5] [6] [7] d


Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 83

Merge sort Algorithm Thao tc trn


Hai dy con s p

12 16 2

10 18

[0] [1] [2] [3] [4] [5] [6] [7] c1 B ng t m c2

[0] [1] [2] [3] [4] [5] [6] [7] d


Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 84

Merge sort Algorithm Thao tc trn


Hai dy con s p

12 16 2

10 18

[0] [1] [2] [3] [4] [5] [6] [7] c1 B ng t m c2

?
ti p t c
85

[0] [1] [2] [3] [4] [5] [6] [7] d


Spring 2009

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

Merge sort Algorithm Thao tc trn


Hai dy con s p

12 16 2

10 18

[0] [1] [2] [3] [4] [5] [6] [7] c1 B ng t m c2

10 12 16 18

[0] [1] [2] [3] [4] [5] [6] [7] Hon t t ! d


Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 86

Merge sort Algorithm Thao tc trn


Hai dy con s p

10 12 16 18

[0] [1] [2] [3] [4] [5] [6] [7] Copy tr l i vo m ng B ng t m

10 12 16 18

[0] [1] [2] [3] [4] [5] [6] [7]

Spring 2009

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

87

Merge sort Algorithm Thao tc trn Minh ha chng trnh


void Merge(int a[], int Left, int Mid, int Right) { // c1, c2: v tr hin ti trn dy con tri, dy con phi // d: v tr hin ti trn dy tm for(int d=Left, int c1=Left, c2=Mid+1; (c1 <= Mid) && (c2 <= Right); d++ ) { if (a[c1] < a[c2]) { // ly phn t trn dy con tri TempArray[d] = a[c1]; c1++; } else { // ly phn t trn dy con phi TempArray[d] = a[c2]; c2++; } // end if } // end for
Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 88

ti p t c

Merge sort Algorithm Thao tc trn Minh ha chng trnh


// Khi 1 trong 2 dy ht phn t // Hon tt dy bn tri for( ; c1 <= Mid; c1++, d++ ) TempArray[d] = a[c1]; // Hon tt dy bn phi for( ; c2 <= Right; c++, d++ ) TempArray[d] = a[c2]; // Sau khi trn, copy mng tm tr li mng gc for (d=Left; d<=Right; d++) { a[d] = TempArray[d]; } } // end of Merge
Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 89

nh gi thut ton (Merge sort Algorithm)


Trn 2 dy c kch thc n/2: O(n) Trn 4 dy c kch thc n/4: O(n) . . . Trn n dy c kch thc 1: O(n)
Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 90

O(log2n) ln

nh gi thut ton (Merge sort Algorithm)


Chi ph O(n*log2n) sp xp bt k 1 dy no S dng 1 vng nh trung gian O(n) phn t C n nh cao (khng b nh hng bi th t ban u ca d liu)

Spring 2009

Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM

91

Thut ton Sp xp nhanh (Quick sort Algorithm)


Quick sort cng l mt thut ton chia tr tng:
Chia dy cn sp thnh 2 phn Cch chia ca Quick sort khc vi cch chia ca Merge sort: dy bn tri cha cc gi tr nh hn dy bn phi. Thc hin vic sp xp trn tng dy con ( qui)
Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 92

Quick sort Algorithm Minh ha chng trnh


void QuickSort(int a[], int Left, int Right) { // Ch x l khi dy c > 1 phn t if (Left < Right) { int m1, m2; // chia dy (Left, Right) thnh 2 dy con Partition(a, Left, Right, m1, m2); QuickSort(a, Left, m1); // dy con bn tri QuickSort(a, m2, Right); // dy con bn phi } }
Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 93

Quick sort Algorithm Cch chia thnh 2 dy con (Partition)


Chn 1 phn t lm chun, thng ta chn phn t gia ca dy
4 12 4 10 8 5 2 11 7 3

5 Phn t chun
Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 94

Quick sort Algorithm Cch chia thnh 2 dy con (Partition)


Bt u so snh cc phn t t 2 u ca dy vi phn t chun
4 low 5 Phn t chun
Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 95

12 4

10

11

3 high

Quick sort Algorithm Cch chia thnh 2 dy con (Partition)


tm ra c 1 phn t sai v tr pha bn phi
4 low 5 Phn t chun
Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 96

12 4

10

11

3 high

Quick sort Algorithm Cch chia thnh 2 dy con (Partition)


tm ra c thm 1 phn t sai v tr pha bn tri
4 12 low 5 Phn t chun
Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 97

10

11

3 high

Quick sort Algorithm Cch chia thnh 2 dy con (Partition)


hon v 2 phn t cho nhau, v li tip tc

12 3

10 low

11

7 high

12 3

5 Phn t chun
Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 98

Quick sort Algorithm Cch chia thnh 2 dy con (Partition)


tm thy 2 phn t sai v tr mi
4 3 4 10 low 5 Phn t chun
Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 99

2 high

11

12

Quick sort Algorithm Cch chia thnh 2 dy con (Partition)


hon v cho nhau, v tip tc
4 3 4 10 2 8 5 10 2 11 7 12

low high 5 Phn t chun


Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 100

Quick sort Algorithm Cch chia thnh 2 dy con (Partition)


low > high kt thc qu trnh phn chia

dy bn tri
4 3 4 2 5 8 8 5

dy bn phi
10 11 7 12

high low (m1) (m2)


Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 101

Quick sort Algorithm Partition Minh ha chng trnh


void Partition(int a[], int Left, int Right, int &m1, int &m2) { int Pivot = a[(Left+Right)/2]; // phn t chun int low = Left, high = Right; while (low < high) { while (a[low] < Pivot) low++; while (a[high] > Pivot) high--; if (low <= high) { Hon v a[low] v a[high] low++; high--; } } m1 = high; m2 = low; // 2 dy con (Left m1), v (m2 Right) }
Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 102

nh gi thut ton (Quick sort Algorithm)


Chi ph trung bnh O(n*log2n) Chi ph cho trng hp xu nht O(n2) Chi ph ty thuc vo cch chn phn t chun:
Nu chn c phn t c gi tr trung bnh, ta s chia thnh 2 dy bng nhau; nu chn nhm phn t nh nht (hay ln nht) O(n2)
Spring 2009 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT H KHTN Tp.HCM 103

You might also like