103
Các thut toán sp xếp (Sorting algorithms) Nguyn Tri Tun Khoa CNTT – ĐH.KHTN.Tp.HCM Email: [email protected]

[Slide] Chuong 1 - Cac thuat toan sap xep.pdf

Embed Size (px)

Citation preview

  • Cc thut ton sp xp(Sorting algorithms)

    Nguyn Tri TunKhoa CNTT H.KHTN.Tp.HCMEmail: [email protected]

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

    Sp xp 1 mng cc s nguynSp 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

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

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

    Thut ton Chn trc tip (Selection sort Algorithm)Thut ton Chn trc tip (Selection sort Algorithm) Bt u bng

    cch tm phn t nh nht

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

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

    Selection sort AlgorithmSelection sort Algorithm

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

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

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

    Selection sort AlgorithmSelection sort Algorithm

    1 phn ca mng c sp xp

    Phn sp Phn cha sp

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

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

    Selection sort AlgorithmSelection sort Algorithm

    Tm phn t nh nhttrong phn cha c sp

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

    Phn sp Phn cha sp

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

    Selection sort AlgorithmSelection sort Algorithm

    Hon v phn t nh nht trong phn cha c sp vi phn t u tin trong phn ny [0] [1] [2] [3] [4] [5]

    Phn sp Phn cha sp

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

    Selection sort AlgorithmSelection sort Algorithm

    Phn c sp xp ca mng c tng thm 1 phn t

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

    Phn sp Phn cha sp

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

    Selection sort AlgorithmSelection sort Algorithm

    Tip tc tng t ... Phn t

    nh nht

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

    Phn sp Phn cha sp

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

    Selection sort AlgorithmSelection sort Algorithm

    Tip tc tng t ...

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

    Phn sp Phn cha sp

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

    Selection sort AlgorithmSelection sort Algorithm

    Tip tc tng t ...

    Phn sp tng thm

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

    Phn sp Phn cha sp

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

    Selection sort AlgorithmSelection sort Algorithm

    Qu trnh ln lt thm tng phn t vo phn sp

    Phn sp cha cc phn t nh nht, sp tng dn

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

    Phn sp Phn cha sp

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

    Selection sort AlgorithmSelection sort Algorithm

    Thut ton dng khi ch cn 1 phn t( l phn t ln nht).

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

    Phn sp Phn cha

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

    Selection sort AlgorithmSelection sort Algorithm

    Ton b mng c sp th t.

    Tng qut: chnphn t nh nht v a n v v tr u ca phn cha c sp trong mng.

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

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

    Selection sort Algorithm(Minh ha chng trnh)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 vfor (int i = 0; i < n; i++ ) {

    // tm phn t nh nht trong phn cha spmin = 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 uif (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)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 (Insertion sort Algorithm) Thut ton

    Chn trc tip cng chia mng thnh 2 phn: phn c spv phn cha c sp [0] [1] [2] [3] [4] [5]

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

    Insertion sort AlgorithmInsertion sort Algorithm

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

    Phn sp Phn cha sp

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

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

    Insertion sort AlgorithmInsertion sort Algorithm

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

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

    Phn sp Phn cha sp

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

    Insertion sort AlgorithmInsertion sort Algorithm

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

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

    Phn sp Phn cha sp

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

    Insertion sort AlgorithmInsertion sort Algorithm

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

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

    Phn sp Phn cha sp

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

    Insertion sort AlgorithmInsertion sort Algorithm

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

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

    Phn sp Phn cha sp

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

    Insertion sort AlgorithmInsertion sort Algorithm

    v li gp may thm 1 ln na..

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

    Phn sp Phn cha sp

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

    Insertion sort AlgorithmLm sao chn 1 phn t ?Insertion sort AlgorithmLm sao chn 1 phn t ?

    Copy phn t mi vo 1 bin trung gian

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

    Phn sp Phn cha sp

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

    Insertion sort AlgorithmLm sao chn 1 phn t ?Insertion sort AlgorithmLm sao chn 1 phn t ?

    Dch chuyn cc phn t trong phn sp sang phi

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

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

    Insertion sort AlgorithmLm sao chn 1 phn t ?Insertion sort AlgorithmLm sao chn 1 phn t ?

    to 1 ch trng cho phn t mi

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

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

    Insertion sort AlgorithmLm sao chn 1 phn t ?Insertion sort AlgorithmLm sao chn 1 phn t ?

    tip tc dch chuyn cc phn t...

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

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

    Insertion sort AlgorithmLm sao chn 1 phn t ?Insertion sort AlgorithmLm sao chn 1 phn t ?

    tip tc dch chuyn cc phn t...

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

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

    Insertion sort AlgorithmLm sao chn 1 phn t ?Insertion sort AlgorithmLm sao chn 1 phn t ?

    ...cho n khi tm thy v tr thch hp cho phn t mi...

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

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

    Insertion sort AlgorithmLm sao chn 1 phn t ?Insertion sort AlgorithmLm sao chn 1 phn t ?

    Copy phn t mi vo li mng, ti v tr ny.

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

    Phn sp Phn cha

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

    Insertion sort AlgorithmLm sao chn 1 phn t ?Insertion sort AlgorithmLm sao chn 1 phn t ?

    Phn t cui cng cng phi chn. Copy n vo 1 bin trung gian...

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

    Phn sp Phn cha

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

    Insertion sort AlgorithmCu hi ?Insertion sort AlgorithmCu hi ?

    C bao nhiu php dch chuyn xy ra ?

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

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

    Insertion sort AlgorithmCu hi ?Insertion sort AlgorithmCu hi ?

    C 4 php dch chuyn

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

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

    Insertion sort AlgorithmInsertion sort Algorithm

    Copy phn t tr li mng.

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

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

    Insertion sort Algorithm(Minh ha chng trnh)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 chnfor (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 phifor (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)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

    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

    Nhn xt chung(Selection & Insertion sort)Nhn xt chung(Selection & Insertion sort)

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

    Thut ton Shell sort(Shell sort Algorithm)Thut ton Shell sort(Shell sort Algorithm)c xut vo nm 1959 bi Donald L.

    Shell trn tp ch Communication of the ACM

    Thut ton ny ci tin hiu qu ca thutton Chn trc tip

    Ph v ro cn chi ph O(n2) ca nhngthut ton sp xp trc

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

    Shell sort AlgorithmShell 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 AlgorithmShell sort Algorithm

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

    Chia dy thnh h=5 dy con

    Index 0 1 2 3 4 5 6 7 8 9 10 11 12h=5 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 0 1 2 3 4 5 6 7 8 9 10 11 12h=5 35 17 11 28 12 41 75 15 96 58 81 94 95

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

    Shell sort AlgorithmShell sort Algorithm

    Chia dy thnh h=3 dy con

    Sp xp 3 dy con bng phng php Chn trc tip

    Index 0 1 2 3 4 5 6 7 8 9 10 11 12h=3 28 12 11 35 15 41 58 17 94 75 81 96 95

    Index 0 1 2 3 4 5 6 7 8 9 10 11 12h=3 35 17 11 28 12 41 75 15 96 58 81 94 95

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

    Shell sort AlgorithmShell sort Algorithm

    Sp xp 1 dy con bng phng php Chn trc tip

    Index 0 1 2 3 4 5 6 7 8 9 10 11 12h=1 28 12 11 35 15 41 58 17 94 75 81 96 95

    Chia dy thnh h=1 dy con

    Index 0 1 2 3 4 5 6 7 8 9 10 11 12h=1 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 AlgorithmShell 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 AlgorithmShell 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 ca thut ton Shell sort ph thc vo 2 vn chnh l:Cch thc xy dng dy hkD liu nhp

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

    Shell sort AlgorithmShell 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- 11, 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)Shell sort Algorithm(Minh ha chng trnh)void ShellSort(int h[], int a[], int t, int n) {

    for (int k=0; k

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

    nh gi thut ton(Shell sort Algorithm)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

    Ngi 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 trng hp xu nht 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)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 AlgorithmNi dungHeap sort AlgorithmNi dung

    nh ngha HeapBiu din Heap bng mng (array)Thao tc c bn trn HeapThut ton Heap sortnh gi thut ton

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

    Heap sort Algorithmnh ngha HeapHeap sort Algorithmnh ngha Heap

    Heap l mt cy nh phn y

    Mi nt trong Heapcha mt gi tr

    c th so snh vigi tr ca nt khc

    19

    4222127

    23

    45

    35

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

    Heap sort Algorithmnh ngha HeapHeap sort Algorithmnh ngha Heap

    c im ca Heapl gi tr ca

    mi nt >= gi tr cacc nt con ca n

    19

    4222127

    23

    45

    35Heap l mt

    cy nh phn y

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

    Heap sort Algorithmnh ngha HeapHeap sort Algorithmnh 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 conH qu:Nt ln nht l ?

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

    Heap sort AlgorithmBiu din Heap bng mngHeap sort AlgorithmBiu din Heap bng mng

    Ta s lu gi tr ca cc nt trong mt array

    2127

    23

    42

    35

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

    Heap sort AlgorithmBiu din Heap bng mngHeap sort AlgorithmBiu din Heap bng mng

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

    2127

    23

    42

    35

    42

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

    Heap sort AlgorithmBiu din Heap bng mngHeap sort AlgorithmBiu din Heap bng mng

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

    2127

    23

    42

    35

    42 35 23

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

    Heap sort AlgorithmBiu din Heap bng mngHeap sort AlgorithmBiu 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

    2127

    23

    42

    35

    42 35 23 27 21

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

    Heap sort AlgorithmBiu din Heap bng mngHeap sort AlgorithmBiu din Heap bng mng

    Lin kt gia cc nt c hiu ngm, khng trc tip dng con tr.

    Array c xem l cy ch do cch ta x l d liu trn 2127

    23

    42

    35

    42 35 23 27 21

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

    Heap sort AlgorithmBiu din Heap bng mngHeap sort AlgorithmBiu 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.

    [0] [1] [2] [3] [4]

    2127

    23

    42

    35

    42 35 23 27 21

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

    Heap sort AlgorithmBiu din Heap bng mngHeap sort AlgorithmBiu 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 AlgorithmThao tc c bn trn HeapHeap sort AlgorithmThao tc c bn trn HeapHeapify - iu chnh 1 phn tNt 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

    4222135

    23

    42

    27

    28

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

    Heap sort AlgorithmThao tc c bn trn HeapHeap sort AlgorithmThao tc c bn trn Heap

    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

    4222127

    23

    42

    35

    28

    Heapify - iu chnh 1 phn t

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

    Heap sort AlgorithmThao tc c bn trn HeapHeap sort AlgorithmThao tc c bn trn Heap

    4222134

    23

    42

    35

    2827

    Heapify - iu chnh 1 phn tHon tt !

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

    Heap sort AlgorithmThao tc c bn trn HeapHeap sort AlgorithmThao tc c bn trn Heapvoid Heapify(int a[], int n, int i) // iu chnh phn t a[i]{

    int saved = a[i]; // lu li gi tr ca nt iwhile (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 AlgorithmThut ton Heap sortHeap sort AlgorithmThut ton Heap sortXy 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 cngThc 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 AlgorithmThut ton Heap sort - Xy dng HeapHeap sort AlgorithmThut 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 tThc 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 AlgorithmThut ton Heap sort - Xy dng HeapHeap sort AlgorithmThut 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

    1714

    23

    20

    12

    20 12 23 14 17

    Cc nt l

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

    Heap sort AlgorithmThut ton Heap sort - Xy dng HeapHeap sort AlgorithmThut ton Heap sort - Xy dng Heap

    // Xy dng mng bnh thng a tr thnh// mt Heapvoid 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 AlgorithmThut ton Heap sort - Sp xpHeap sort AlgorithmThut 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)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)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 ngayNu vn ln: chia thnh 2 vn nh, mi

    phn bng Gii quyt tng vn nhKt 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 AlgorithmMerge sort Algorithm

    tng:Chia dy cn sp thnh 2 phn, v tr giaNu s phn t ca mi phn > 1 th

    Sp sp mi phn bng Merge sortTrn 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 AlgorithmMerge sort Algorithm

    V d:

    2 3 6 7 10 12 16 18

    16 12 7 6 3 2 18 10

    ?

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

    Merge sort AlgorithmMerge sort Algorithm

    16 12 7 6 3 2 18 10

    16 12 7 6 3 2 18 10

    V d:

    Chia

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

    Merge sort AlgorithmMerge sort Algorithm

    16 12 7 6 3 2 18 10

    16 12 7 6 3 2 18 10

    16 12 7 6 3 2 18 10

    Chia

    Chia

    V d:

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

    Merge sort AlgorithmMerge sort Algorithm

    16 12 7 6 3 2 18 10

    16 12 7 6 3 2 18 10

    16 12 7 6 3 2 18 10

    16 12 7 6 3 2 18 10

    Chia

    Chia

    Chia

    V d:

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

    Merge sort AlgorithmMerge sort Algorithm

    16 12 7 6 3 2 18 10

    16 12 7 6 3 2 18 10

    16 12 7 6 3 2 18 10

    16 12 7 6 3 2 18 10

    12 16 6 7 2 3 10 18

    Chia

    Chia

    Chia

    Trn

    V d:

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

    Merge sort AlgorithmMerge sort Algorithm

    16 12 7 6 3 2 18 10

    16 12 7 6 3 2 18 10

    16 12 7 6 3 2 18 10

    16 12 7 6 3 2 18 10

    12 16 6 7 2 3 10 18

    6 7 12 16 2 3 10 18

    Chia

    Chia

    Chia

    Trn

    Trn

    V d:

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

    Merge sort AlgorithmMerge sort Algorithm

    16 12 7 6 3 2 18 10

    16 12 7 6 3 2 18 10

    Chia 16 12 7 6 3 2 18 10

    16 12 7 6 3 2 18 10

    Trn 12 16 6 7 2 3 10 18

    6 7 12 16 2 3 10 18

    2 3 6 7 10 12 16 18

    Chia

    Chia

    Trn

    Trn

    V d:

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

    Merge sort Algorithm(Minh ha chng trnh)Merge sort Algorithm(Minh ha chng trnh)

    void MergeSort(int a[], int Left, int Right){

    int Mid; // V tr ca phn t giaif (Left < Right) { // Dy c > 1 phn t

    Mid = (Left + Right)/2; // Chia thnh 2 dy MergeSort(a, Left, Mid); // Sort dy bn triMergeSort(a, Mid+1, Right); // Sort dy bn phi// Trn 2 dy li vi nhauMerge(a, Left, Mid, Right);

    }} // end of MergeSort

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

    Merge sort AlgorithmThao tc trnMerge sort AlgorithmThao tc trn

    6 7 12 16 2 3 10 18

    ? ? ? ? ? ? ? ?

    Hai dy con sp

    Bng tm

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

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

    c1 c2

    d

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

    Merge sort AlgorithmThao tc trnMerge sort AlgorithmThao tc trn

    6 7 12 16 2 3 10 18

    2 ? ? ? ? ? ? ?

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

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

    c1 c2

    d

    Hai dy con sp

    Bng tm

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

    Merge sort AlgorithmThao tc trnMerge sort AlgorithmThao tc trn

    6 7 12 16 2 3 10 18

    2 3 ? ? ? ? ? ?

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

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

    c1 c2

    d

    Hai dy con sp

    Bng tm

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

    Merge sort AlgorithmThao tc trnMerge sort AlgorithmThao tc trn

    6 7 12 16 2 3 10 18

    2 3 6 ? ? ? ? ?

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

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

    c1 c2

    d

    Hai dy con sp

    Bng tm

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

    Merge sort AlgorithmThao tc trnMerge sort AlgorithmThao tc trn

    6 7 12 16 2 3 10 18

    2 3 6 7 ? ? ? ?

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

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

    c1 c2

    d

    Hai dy con sp

    Bng tm

    tip tc

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

    Merge sort AlgorithmThao tc trnMerge sort AlgorithmThao tc trn

    6 7 12 16 2 3 10 18

    2 3 6 7 10 12 16 18

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

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

    c1 c2

    d

    Hai dy con sp

    Bng tm

    Hon tt !

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

    Merge sort AlgorithmThao tc trnMerge sort AlgorithmThao tc trn

    2 3 6 7 10 12 16 18

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

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

    2 3 6 7 10 12 16 18Hai dy con sp

    Bng tm

    Copy tr li vo mng

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

    Merge sort AlgorithmThao tc trn Minh ha chng trnhMerge sort AlgorithmThao 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 tmfor(int d=Left, int c1=Left, c2=Mid+1; (c1

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

    Merge sort AlgorithmThao tc trn Minh ha chng trnhMerge sort AlgorithmThao tc trn Minh ha chng trnh

    // Khi 1 trong 2 dy ht phn t// nu dy bn tri cn d chp vo mng tmfor( ; c1

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

    nh gi thut ton(Merge sort Algorithm)nh gi thut ton(Merge sort Algorithm)

    Trn 2 dy c kch thc n/2:O(n)

    O(n).

    .

    .

    O(n)

    O(log2n)ln

    Trn 4 dy c kch thc n/4:

    Trn n dy c kch thc 1:

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

    nh gi thut ton(Merge sort Algorithm)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 tC 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)Thut ton Sp xp nhanh(Quick sort Algorithm)Quick sort cng l mt thut ton chia

    tr tng:Chia dy cn sp thnh 2 phnCch 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 AlgorithmMinh ha chng trnhQuick sort AlgorithmMinh ha chng trnh

    void QuickSort(int a[], int Left, int Right){

    // Ch x l khi dy c > 1 phn tif (Left < Right) {

    int m1, m2;// chia dy (Left, Right) thnh 2 dy conPartition(a, Left, Right, m1, m2);QuickSort(a, Left, m1); // dy con bn triQuickSort(a, m2, Right); // dy con bn phi

    }}

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

    Quick sort AlgorithmCch chia thnh 2 dy con (Partition)Quick sort AlgorithmCch chia thnh 2 dy con (Partition)

    8 32 11 754 10124 5

    5

    Phn t chun

    Chn 1 phn t lm chun, thng ta chn phn t gia ca dy

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

    Quick sort AlgorithmCch chia thnh 2 dy con (Partition)Quick sort AlgorithmCch chia thnh 2 dy con (Partition)

    low high

    8 32 11 754 10124 5

    5

    Phn t chun

    Bt u so snh cc phn t t 2 u ca dy vi phn t chun

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

    Quick sort AlgorithmCch chia thnh 2 dy con (Partition)Quick sort AlgorithmCch chia thnh 2 dy con (Partition)

    low high

    8 2 11 754 10124 5

    tm ra c 1 phn t sai v tr pha bn phi

    5

    Phn t chun

    33

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

    Quick sort AlgorithmCch chia thnh 2 dy con (Partition)Quick sort AlgorithmCch chia thnh 2 dy con (Partition)

    low high

    8 32 11 7512 10124 5

    5

    Phn t chun

    tm ra c thm 1 phn t sai v tr pha bn tri

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

    Quick sort AlgorithmCch chia thnh 2 dy con (Partition)Quick sort AlgorithmCch chia thnh 2 dy con (Partition)

    low high

    8 2 11 75104 5

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

    5

    Phn t chun

    123 312

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

    Quick sort AlgorithmCch chia thnh 2 dy con (Partition)Quick sort AlgorithmCch chia thnh 2 dy con (Partition)

    low high

    8 1211 75434 5

    tm thy 2 phn t sai v tr mi

    5

    Phn t chun

    1010 22

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

    210

    Quick sort AlgorithmCch chia thnh 2 dy con (Partition)Quick sort AlgorithmCch chia thnh 2 dy con (Partition)

    low high

    8 1210 11 754 234 5

    hon v cho nhau, v tip tc

    5

    Phn t chun

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

    Quick sort AlgorithmCch chia thnh 2 dy con (Partition)Quick sort AlgorithmCch chia thnh 2 dy con (Partition)

    low(m2)

    high(m1)

    1210 11 74 234

    low > high kt thc qu trnh phn chia

    dy bn tri dy bn phi

    8 585

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

    Quick sort AlgorithmPartition Minh ha chng trnhQuick sort AlgorithmPartition Minh ha chng trnh

    void Partition(int a[], int Left, int Right, int &m1, int &m2){

    int Pivot = a[(Left+Right)/2]; // phn t chunint low = Left, high = Right;while (low < high) {

    while (a[low] < Pivot) low++;while (a[high] > Pivot) high--;if (low

  • Quick sort AlgorithmCch chn phn t Pivot Quick sort AlgorithmCch chn phn t Pivot

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

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

    nh gi thut ton(Quick sort Algorithm)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)