Вы находитесь на странице: 1из 83

Data Structure Author: chuong3a, nick yahoo: chuong3a

Code Interchange Sort ............................................................................................2 Cc gii thut sp !p ............................................................................................." #h$%ng php ch&n tr'c ti!p ( Insertion Sort..........................................................." )inary Search ..........................................................................................................* +ii thut sp !p ch&n nh, ph-n:............................................................................. /01 ph2n t3 trong 1ng d4ng 56 7uy......................................................................8 #h$%ng php n9i :;t ( )u::<e Sort.........................................................................= )u::<eSort >ith Struct ............................................................................................= Shake Sort A<gorith1............................................................................................?@ Auick Sort A<gorith1 ...........................................................................................?? AuickSort using Stack ..........................................................................................?3 AuickSort run :y hand ..........................................................................................?B AuickSort run :y hand 2 .......................................................................................?8 She<< Sort A<gorith1 .............................................................................................?= Cerge Sort ............................................................................................................?= Cerge Sort >ith Struct ..........................................................................................2? CergeSort 2...........................................................................................................22 CergeSort run :y hand .........................................................................................23 Dadi Sort .............................................................................................................2* Dadi Sort >ith Struct ...........................................................................................28 Dadi Sort >ith C<ass ...........................................................................................2= Dadi Sort run :y hand ..........................................................................................3? +ii thut Eeap Sort .............................................................................................33 Code Eeap Sort .....................................................................................................33 EeapSort run :y hand ...........................................................................................3" FinkedFist ? ..........................................................................................................3= FinkedFist 2 .........................................................................................................."? FinkedFist >ith C<ass ..........................................................................................."" Cerge Sort FinkedFist ........................................................................................."8 Cerge Sort FinkedFist >ith C<ass ........................................................................B@ AuickSort Dou:<e FinkedFist ..............................................................................B3 AuickSort Dou:<e FinkedFist >ith C<ass .............................................................BB Dadi Sort FinkedFist ............................................................................................B. AuickSort FinkedFist ...........................................................................................*@ Auick Sort FinkedFist >ith C<ass .........................................................................*2 EG1 tHnh ?@@@I ?...................................................................................................*B EG1 tHnh ?@@@I 2...................................................................................................** EG1 tHnh ?@@@I 3...................................................................................................*. ?

Ca<c ?@@@I 3 and Jotation ....................................................................................*. Dadi Sort FinkedFist ............................................................................................*8 CK phLng hGng 5Mi 1ua NO e1 phi1 ..................................................................@ P9i c% sQ ?@ sang c% sQ 2 d4ng Stack ...................................................................2 Change tenth radi to second radi using Decursion .............................................3 Change tenth radi to second radi >ith notation Rinc<ude Sstdio.hT................................................................................................." )inary Uuc<ide A<gorith1......................................................................................." )inary Uuc<ide A<gorith1 >ith Jotation................................................................B )u::<e Sort Dou:<e FinkedFist .............................................................................. ShakeSort Dou:<e FinkedFist.................................................................................8 Dadi Sort FinkedFist >ith C<ass .........................................................................8@

Code Interchange Sort Rinc<ude Sstdio.hT Rinc<ude Sconio.hT Rinc<ude Sstd<i:.hT Rinc<ude Sti1e.hT Noid DeadData Vint WXa, int Xn, char WYna1eZ [ \IFU WY] Y ^ YopenVYna1e,_r`_Z] iY VIYZ [ printYV_Can not read the Yi<e as_,Yna1eZ] return] b YscanYVY,_ad_,XnZ] Yor Vint i ^ @ ] i S n ] i``Z YscanY VY,_ad_,XacidZ] Yc<oseVYZ] b Noid eriteData Vint Wa, int Xn, char WYna1eZ [ \IFU WY] Y ^ Yopen VYna1e, _>t_Z] iY VIYZ [ printY V_Can not >rite the Yi<e as fn_, Yna1eZ] return] b YprintY VY, _ad fn_, nZ] Yor Vint i ^ @ ] i S n ] i``Z YprintY VY, _ad _, acidZ] printY V_fn Data is >riten in Yi<e as fn_,Yna1eZ] Yc<ose VYZ] b 2

Noid S>ap Vint Xa, int X:Z [ int c ^ a] a ^ :] : ^ c] b Noid InterchangeSort Vint Wa, int XnZ [ Yor Vint i ^ @ ] i S ng? ] i``Z YorVint h ^ i`?] h S n ] h``Z [ iYVacid T achdZ S>apVacid, achdZ] b eriteData Va, n, _D:ffiutput.t t_Z] b Noid Dando1 Vint Wa, int XnZ [ int i] printYV_1ang co ad phan tu fn_, nZ] srand Vti1eV @ ZZ] printY V_Untering rando1 Na<ues Yro1 @ to B@@ into array fn_Z] Yor Vi ^ @] i S n] i ``Z acid ^ randVZ a ?@@] b Noid iutput Vint Wa, int XnZ [ int i] Yor Vi ^ @] i S n] i ``Z printY Vjad k, acidZ] b Noid 1ainVZ [ int Wa, n] printY V_Jhap n: _Z] scanY V_ad_, XnZ] a ^ ne> int cnd] Dando1 Va, nZ] eriteData Va, n, _D:ff>?.t t_Z] DeadData Va, n, _D:ff>?.t t_Z] printYVj/he current array fn_Z] iutput Va, nZ] InterchangeSort Va, nZ] eriteData Va, n, _D:ffiutput.t t_Z] iutput Va, nZ] getchVZ] b int FinearSearch Vint Wa, int n, int Z [ int i ^ @] >hi<e V Vi S nZ XX Vacid I^ Z Z [ i``] iY V i ^^ n Z return g?] e<se return i] b /rong cGi 5lt trmn, 1ni <2n <lp coa Npng <lp >hi<e phi kiq1 tra 2 5iru ki6n Vi S JZ ( 5iru ki6n :imn coa 1ng NG Vacid I^ Z ( 5iru ki6n kiq1 tra chHnh. Jh$ng tht s' chs c2n kiq1 tra 5iru ki6n chHnh Vacid I^ Z, 5q ci ti!n cGi 5lt ct thq d4ng ph$%ng php <Hnh canh: 5lt thm1 ? ph2n t3 ct gi tr, NGo cuQi 1ng, nh$ Ny :o 51 <uKn t01 3

thuy trong 1ng, sau 5t d'a NGo N, trH t01 thuy 5q k!t <un. #h$%ng php <Hnh canh givp gi1 :wt ? phOp so snh trong Npng <lp. int FinearSearch Vint Wa, int n, int Z [ int i ^ @] xx 1ng gy1 n ph2n t3 ac@d,..., acng?d acnd ^ ] xx thm1 ph2n t3 thz n ` ? >hi<e Vacid I^ Z i``] iY Vi ^^ JZ return g?] xx t01 h!t 1ng nh$ng ko ct e<se return i] xx t01 thuy t{i N, trH i. b Cc gii thut sp !p #h$%ng php 59i chn ( Interchange Sort Noid InterchangeSort Vint Wa, int XnZ [ Yor Vint i ^ @ ] i S ng? ] i``Z Yor Vint h ^ i`?] h S n ] h``Z [ iY Vacid T achdZ S>apVacid, achdZ] b b #h$%ng php ch;n tr'c ti!p ( Se<ection Sort 1ethod Noid Se<ectionSort Vint Wa, int XnZ [ int 1in] xx chs sQ ph2n t3 nhL nhut trong d|y Yor Vint i ^ @] i S ng?] i``Z [ Yor Vint h ^ i ` ?] h S n] h``Z [ iY Vachd S ac1indZ 1in ^ h] iY V1in I^ iZ S>ap Vac1ind, achdZ] b b b #h$%ng php ch&n tr'c ti!p ( Insertion Sort } t$~ng: Step ?: i ^ 2] xx gi s3 ct 5o{n ac?d 5| 5$Mc sp thz t'. Step 2: ^ acid] /01 N, trH pos thHch hMp trong 5o{n ac?d 5!n acig?d 5q ch&n acid NGo. Step 3: Di chn cc ph2n t3 t acposd 5!n acig?d sang phi ? N, trH 5q ch&n acid NGo. Step ": acposd ^ ] xx ct 5o{n ac?d,..., acid 5| 5$Mc sp. Step B: i ^ i ` ?] IY Vi S^ nZ goto Step 2] U<se Stop] Setup: Noid InsertionSort Vint Wa, int XnZ [ int pos, i, ] Yor Vi ^ ?] i S n] i``Z [ ^ acid] pos ^ i g ?] >hi<e V Vpos T^ @Z XX Vacposd T Z Z [ acpos`?d ^ acposd] posgg] b acpos`?d ^ ] b xx ch&n NGo d|y "

b Insertion Sort >ith notation: Noid InsertionSort Vint Wa, int XnZ [ int pos, i] int ] xx <$u gi tr, acid trnh :, ghi 5& khi di chn cc ph2n t3. Yor Vi ^ ?] i S n] i``Z [ xx interNa< ac@d >as sorted. ^ acid] pos ^ i g ?] >hi<e V Vpos T^ @Z XX Vacposd T Z Z [ xx \ind the position to insert . xx di chn cc ph2n t3 5zng sau trong d|y 1wi. acpos`?d ^ acposd] posgg] b acpos`?d ^ ] b xx ch&n NGo d|y b Noid insertionSort VArray XaZ [ int i, h, ] Yor Vi ^ ?] i S a.n] i``Z [ ^ a.Acid] h ^ i g ?] >hi<e Vh T^ @ XX S^ a.AchdZ [ a.Ach`?d ^ a.Achd] hgg] b a.Ach`?d ^ ] b b Rinc<ude Sstdio.hT Rinc<ude Sconio.hT Rinc<ude Sstd<i:.hT Rinc<ude Sti1e.hT typedeY struct Array [ int n] int WA] b a] Noid Create VArray aZ [ int k] srand Vti1eV @ ZZ] printY V_Untering rando1 Na<ues Yro1 @ to B@@ into array fn_Z] Yor Vk ^ @] k S a.n] k ``Z a.Ackd ^ randVZ a B@@ ` ?] b Noid readData VArray a, char WYna1eZ [ \IFU WY] Y ^ YopenVYna1e,_r`_Z] iY VIYZ [ printYV_Can not read the Yi<e as_,Yna1eZ] return] b YscanYVY,_ad_, Xa.nZ] Yor Vint i ^ @ ] i S a.n ] i``Z YscanYVY,_ad_, Xa.AcidZ] Yc<ose VYZ] B

b Noid >riteData VArray a, char WYna1eZ [ \IFU WY] Y ^ Yopen VYna1e, _>t_Z] iY VIYZ [ printY V_Can not >rite the Yi<e as fn_, Yna1eZ] return] b YprintY VY, _ad fn_, a.nZ] Yor Vint i ^ @ ] i S a.n ] i``Z YprintY VY, _ad _, a.AcidZ] printY V_fn Data is >riten in Yi<e as fn_,Yna1eZ] Yc<ose VYZ] b Noid insertionSort VArray XaZ [ int i, h, ] Yor Vi ^ ?] i S a.n] i``Z [ ^ a.Acid] h ^ i g ?] >hi<e Vh T^ @ XX S^ a.AchdZ [ a.Ach`?d ^ a.Achd] hgg] b a.Ac``hd ^ ] b b Noid iutput VArray aZ [ int i] Yor Vi ^ @] i S a.n] i``Z [ printY V_acadd ^ ad fn_, i, a.AcidZ] b b Noid 1ain VZ [ Array a] printYV_so phan tu cua 1ang: fn_Z] scanYV_ad_, Xa.nZ] a.A ^ ne> int ca.nd] CreateVaZ] iutput VaZ] >riteData Va, _D:ff>?.t t_Z] readData Va, _D:ff>?.t t_Z] insertionSort VaZ] printY V_/he Array is AYter Sorting fn_Z] iutput VaZ] >riteData Va, _D:ffiutput.t t_Z] getchVZ] b )inary Search Rinc<ude Sstdio.hT Rinc<ude Sconio.hT Rinc<ude Sstd<i:.hT Rinc<ude Sti1e.hT struct Array [ int n] int WA] b a]

Noid Create VArray aZ [ int k] srand Vti1eV @ ZZ] printY V_Untering rando1 Na<ues Yro1 @ to B@@ into array fn_Z] Yor Vk ^ @] k S a.n] k ``Z a.Ackd ^ randVZ a B@@ ` ?] b Noid iutput VArray aZ [ int i] Yor Vi ^ @] i S a.n] i``Z [ printY V_acadd ^ ad fn_, i, a.AcidZ] b b Noid S>ap Vint Xa, int X:Z [ int te1p ^ a] a ^ :] : ^ te1p] b int )inarySearch VArray a, int , int iZ [ iY Vi ^^ a.ng? XX a.Acid I^ Z [ printY V_o ti1 thay phan tu ad fn_, Z] return g?] b iY Va.Acid ^^ Z return i] e<se return )inarySearch Va, , i`?Z] b int 1ain VZ [ Array a] int , i, k] i ^ @] printY V_so phan tu cua 1ang: fn_Z] scanY V_ad_, Xa.nZ] a.A ^ ne> int ca.nd] CreateVaZ] iutput VaZ] printY V_Jhap phan tu can ti1 fn_Z] scanY V_ad_, X Z] k ^ )inarySearch Va, , iZ] printY V_i tri cua phan tu ad <a: ad fn_, , kZ] syste1 V_pause_Z] b +ii thut sp !p ch&n nh, ph-n: g hi t01 N, trH thHch hMp 5q ch&n acid NGo 5o{n ac@d 5!n acig?d, do 5o{n 5| 5$Mc sp nmn ct thq d4ng gii thut t01 nh, ph-n 5q t01 N, trH pos, khi 5t ct gii thut sp !p ch&n nh, ph-n. int )inarySearch Vint Wa, int n, int Z [ int <eYt ^ @, right, 1id] right ^ n ( ?] >hi<e V<eYt S^ rightZ [ 1id ^ V<eYt ` rightZx2] iY Vac1idd T Z right ^ 1id g ?] e<se <eYt ^ 1id ` ?] .

b] return <eYt] b Noid )insertionSort Vint Wa, int nZ [ int , k] Yor Vint i ^ ?] i S n] i``Z [ ^ acid] k ^ )inarySearch Va, i, Z] Yor Vint h ^ i] h T k] hggZ achd ^ ach g ?d] ackd ^ ] b b erong int )inarySearch Vint Wa, int n, int Z [ int <eYt ^ @, right ^ n g ?, 1id] >hi<e V<eYt S^ rightZ [ 1id ^ V<eYt ` rightZx2] iY Vac1idd T Z right ^ 1id g ?] e<se <eYt ^ 1id ` ?] b] return 1id] b /01 ph2n t3 trong 1ng d4ng 56 7uy Rinc<ude Sstdio.hT Rinc<ude Sstd<i:.hT Rinc<ude Sti1e.hT struct Array [ int n] int WA] b a] Noid Create VArray aZ [ int k] srand Vti1eV @ ZZ] printY V_Untering rando1 Na<ues Yro1 @ to B@@ into array fn_Z] Yor Vk ^ @] k S a.n] k ``Z a.Ackd ^ randVZ a B@@ ` ?] b Noid iutput VArray aZ [ int i] Yor Vi ^ @] i S a.n] i``Z [ printY V_acadd ^ ad fn_, i, a.AcidZ] b b int Search VArray a, int <eYt, int right, int Z [ int 1 ^ V<eYt ` rightZx2] iY V<eYt T rightZ return g?] 8

iY Vac1d T Z return Va, <eYt, 1g?, Z] iY Vac1d S Z return Va, 1`?, right, Z] return 1] b int 1ain VZ [ Array a] int , i, k] i ^ @] printY V_so phan tu cua 1ang: fn_Z] scanY V_ad_, Xa.nZ] a.A ^ ne> int ca.nd] CreateVaZ] iutput VaZ] >hi<eV?Z [ printY V_Jhap phan tu can ti1 fn_Z] scanY V_ad_, X Z] k ^ Search Va, , iZ] printY V_i tri cua phan tu ad <a: ad fn_, , kZ] char ch] printY V_)an co 1uon ti1 so khac xJ fn_Z] ch ^ getchVZ] iY Vch ^^ n ch ^^ JZ return @] b syste1 V_pause_Z] b #h$%ng php n9i :;t ( )u::<e Sort Noid )u:<eSort Vint Wa, int XnZ [ int i, h] Yor Vi ^ @] i S ng?] i``Z Yor Vh ^ n] h T i] hggZ iY Vachd S achg?dZ S>ap Vachd, achg?dZ] b )u::<eSort >ith Struct Rinc<ude Sstdio.hT Rinc<ude Sconio.hT Rinc<ude Sstd<i:.hT Rinc<ude Sti1e.hT struct Array [ int n] int WA] b a] Noid Create VArray aZ [ int k] srand Vti1eV @ ZZ] printY V_Untering rando1 Na<ues Yro1 @ to B@@ into array fn_Z] Yor Vk ^ @] k S a.n] k ``Z a.Ackd ^ randVZ a B@@ ` ?] b Noid iutput VArray aZ [ =

int i] Yor Vi ^ @] i S a.n] i``Z [ printY V_acadd ^ ad fn_, i, a.AcidZ] b b Noid S>ap Vint Xa, int X:Z [ int te1p ^ a] a ^ :] : ^ te1p] b Noid :u:<eSort VArray aZ [ int i, h, n] n ^ a.n] Yor Vi ^ @] i S ng?] i``Z Yor Vh ^ ng?] h T i] hggZ iY Va.Achd S a.Achg?dZ S>ap Va.Achd, a.Achg?dZ] b int 1ain VZ [ Array a] printYV_so phan tu cua 1ang: fn_Z] scanYV_ad_, Xa.nZ] a.A ^ ne> int ca.nd] CreateVaZ] iutput VaZ] :u:<eSort VaZ] printY V_/he Array AYter Sorting fn_Z] iutput VaZ] syste1 VjpausekZ] b Co11ent: )u::<e Sort ct khuy!t 5iq1: ko nhn di6n dc d|y 5| ct thz t' tng ph2n. Cc ph2n t3 nhL 5$Mc 5$a Nr N, trH 5vng nhanh, trong khi cc ph2n t3 <wn <{i 5$Mc 5$a Nr N, trH 5vng ch1. Shake Sort A<gorith1 g +ii thut sp !p Shake Sort cng d'a trmn nguymn tc 59i chn tr'c ti!p, nh$ng t01 cch khc phvc cc nh$Mc 5iq1 coa )u::<e Sort. g /rong 1ni <2n sp !p, duy6t 1ng theo 2 <$Mt t 2 phHa: F$Mt 5i: 5y ph2n t3 nhL Nr 52u 1ng. F$Mt Nr: 5y ph2n t3 <wn Nr cuQi 1ng. Step ?: t ^ @, r ^ n g ?] xx \ro1 ? to r are the interNa< need to :e sorted. Step 2: Step 2a: i ^ r] xx #ush s1a<<er e<e1ents to the :eginning oY array. >hi<e Vi T tZ: iY Vacid S acig?dZ: acid acig?d] i ^ i g ?] Step 2:: h ^ t] xx #ush greater e<e1ents to the end oY array. >hi<e Vh S rZ: iY Vachd T ach`?dZ: achd ach`?d] h ^ h ` ? Step 3: IY Vt S rZ: goto Step 2. Setup: ShakeSort ? Noid ShakeSort VArray XaZ [ int <eYt, right, i, h] <eYt ^ @] right ^ a.n g ?] >hi<e V<eYt S rightZ [ Yor Vi ^ right] i T <eYt] iggZ [ iY Va.)cid S a.)cig?dZ ?@

S>ap Va.)cid, a.)cig?dZ] b Yor Vh ^ <eYt] h S right] h``Z [ iY Va.)chd T a.)ch`?dZ S>ap Va.)chd, a.)ch`?dZ] b <eYt ^ <eYt ` ?] right ^ right g ?] b xW Und >hi<e V<eYt S rightZ Wx b ShakeSort 2 Noid ShakeSort Vint Wa, int nZ [ int <eYt, right, i, h, k] <eYt ^ @] right ^ n g ?] k ^ n g ?] >hi<e V<eYt S rightZ [ Yor Vh ^ right] h T <eYt] hggZ iY Vachd S achg?dZ [ S>ap Vachd, achg?dZ] k ^ h] xW Dung :ien k de <uu <ai Ni tri ay ra hoan Ni. Wx b <eYt ^ k] Yor Vh ^ <eYt] h S right] h``Z iY Vachd T ach`?dZ [ S>ap Vachd, ach`?dZ] k ^ h] b right ^ k] b xW Und >hi<e V<eYt S rightZ Wx b Noid ShakeSort VArray XaZ [ int <eYt ^ @, right ^ a.n g ?, k ^ @, i] >hi<e V<eYt S rightZ [ xW khong duoc ghi V<eYt S^ rightZ Ni no tao ra Nong <ap No han Wx Yor Vi ^ <eYt] i S right] i``Z iY Va.Acid T a.Aci`?dZ [ S>ap Va.Acid, a.Aci`?dZ] k ^ i] b right ^ k] xW Dung :ien k de <uu <ai Ni tri ay ra hoan Ni. Wx Yor Vi ^ right ] i T <eYt] iggZ iY Va.Acid S a.Acig?dZ [ S>ap Va.Acid, a.Acig?dZ] k ^ i] b <eYt ^ k] b b Auick Sort A<gorith1 Step ?: partition the se7uence a t ,..., a r into the su:se7uences.

??

Su:se7uence ?: a t ,...,a h Su:se7uence 2: a h+?,...,a i ? = Su:se7uence ?: a i ,...,a r Step 2: IY Vt S hZ xx Su:se7uence ? has 1ore one e<e1ent. #artition the su:se7uence ?. IY Vi S rZ xx Su:se7uence 3 has 1ore one e<e1ent. #artition the su:se7uence 3. Setup: AuickSort ? Noid AuickSort Vint Wa, int <eYt, int rightZ [ int 1id] iY V<eYt T rightZ return] e<se 1id ^ #artition Va, <eYt, rightZ] AuickSort Va, <eYt, 1id g ?Z] AuickSort Va, 1id ` ?, rightZ] b int #artition Vint Wa, int <eYt, int rightZ [ int i, h, ] i ^ <eYt g ?] ^ acrightd] Yor Vh ^ <eYt] h S right] h``Z iY Vachd S^ Z [ i ^ i ` ?] S>ap Vacid, achdZ] b S>ap Vaci`?d, acrightdZ] return i ` ?] b int #artition Vint Wa, int <eYt, int rightZ [ int i ^ <eYt g ?, h ^ right] int N ^ acrightd] Yor V]]Z [ >hi<e Vac``id S NZ] >hi<e VN S acgghdZ] iY Vh ^^ <eYtZ :reak] iY Vi T^ hZ :reak] S>ap Vacid, achdZ] b S>ap Vacid, acrightdZ] return i] b AuickSort 2 Noid 7uickSort Vint Wa, int <eYt, int rightZ [ int i, h, , te1p] ^ acV<eYt ` rightZx2d] i ^ <eYt] h ^ right] >hi<e Vi S hZ [ >hi<e Vacid S Z i``] >hi<e Vachd T Z hgg] iY Vi S^ hZ [ ?2

S>ap Vacid, achdZ] i``] hgg] b b iY V<eYt S hZ 7uickSort Va, <eYt, hZ] iY Vi S rightZ 7uickSort Va, i, rightZ] b erong Noid 7uickSort Vint Wa, int <eYt, int rightZ [ int i, h] 1id ^ V<eYt ` rightZx2] i ^ <eYt] h ^ right] >hi<e Vi S^ hZ [ >hi<e Vacid S ac1iddZ i ^ i ` ?] >hi<e Vachd T ac1iddZ h ^ h ( ?] iY V i S^ hZ [ S>ap Vacid, achdZ] i``] hgg] b b iY Vh T <eYtZ AuickSort Va, <eYt, hZ] iY Vi S rightZ AuickSort Va, i, rightZ] return] b

^ ac1idd

AuickSort using Stack Rinc<ude Sstdio.hT int stackc?@@d] int top ^ g?] xx hoi tao stack rong Noid #ush Vint Xtop, int Z [ xx Day phan tu NGo stack iY Vtop ^^ ==Z [ Yor Vint i ^ @] i S B] i``Z puts V_Stack da day_Z] return] b e<se [ top``] stackctopd ^ ] b b int #op Vint XtopZ [ xx Fay phan tu khoi stack int te1p] iY Vtop ^^ g?Z return top] e<se [ te1p ^ stackctopd] topgg] return te1p] b b int isU1ptyVZ [ ?3

iY Vtop ^^ g?Z return ?] e<se return @] b Noid Eoani Vint Xa, int X:Z [ int te1p] te1p ^ a] a ^ :] : ^ te1p] b Noid AuickSort Vint acd, int nZ [ int F, D, #, i, h, ] F ^ @] D ^ ng?] #ush Vtop, @Z] #ush Vtop, ng?Z] do [ # ^ #op VtopZ] do [ xW#han hoach aF..aD Wx i ^ F, h ^ D] ^ acVF`DZx2d] do [ >hi<e Vacid S Z i``] >hi<e Vachd T Z hgg] iY Vi S^ hZ [ EoaniVacid, achdZ] i``] hgg] b b >hi<e Vi S^ hZ] iY Vi S DZ [ #ush Vtop, iZ] #ush Vtop, DZ] b D ^ h] b >hi<e VF S DZ] b >hi<e VisU1ptyVZ I^ ?Z] b Noid iutput Vint WA, int nZ [ int i] Yor Vi ^ @] i S n ] i``Z printY V_Acadd ^ ad _, i, AcidZ] printY V_fn_Z] b Noid 1ainVZ [ int n ^ ?@] int Ac?@d ^ [ B3, "., 2=, 23, 28, 2", *?, 3B, ?=, 8= b] iutput VA, nZ] AuickSort VA, nZ] printY V_/he Array aYter sorting fn_Z] iutput VA, nZ] b

?"

AuickSort run :y hand Rinc<ude Sstdio.hT Rinc<ude Sconio.hT Rinc<ude Sstd<i:.hT Rinc<ude Sti1e.hT struct Array [ int n] int WA] b] Noid Create VArray aZ [ int k] srand Vti1eV @ ZZ] Yor Vk ^ @] k S a.n] k ``Z a.Ackd ^ randVZ a B@@ ` ?] b Noid readData VArray a, char WYna1eZ [ \IFU WY] Y ^ YopenVYna1e,_r`_Z] iY VIYZ [ printYV_Can not read the Yi<e as_,Yna1eZ] return] b YscanYVY,_ad_, Xa.nZ] Yor Vint i ^ @ ] i S a.n ] i``Z YscanYVY,_ad_, Xa.AcidZ] Yc<ose VYZ] b Noid >riteData VArray a, char WYna1eZ [ \IFU WY] Y ^ Yopen VYna1e, _>t_Z] iY VIYZ [ printY V_Can not >rite the Yi<e as fn_, Yna1eZ] return] b YprintY VY, _ad fn_, a.nZ] Yor Vint i ^ @ ] i S a.n ] i``Z YprintY VY, _ad _, a.AcidZ] printY V_fn Data is >riten in Yi<e as fn_,Yna1eZ] Yc<ose VYZ] b Noid iutput VArray aZ [ int i] printY V_iutput fn_Z] Yor Vi ^ @] i S a.n] i``Z [ printY V_acadd ^ ad fn_, i, a.AcidZ] b b Noid 7uickSort VArray a, int <eYt, int rightZ [ int i, h, , te1p, 1id] ?B

1id ^ V<eYt ` rightZx2] ^ a.Ac1idd] i ^ <eYt] h ^ right] printY V_i ^ ad, h ^ ad fn_, i, hZ] >hi<e Vi S hZ [ >hi<e Va.Acid S Z [ printY V_>hi<e acid ^ acadd ^ ad S ad fn_, i, a.Acid, Z] printY V_<eYt ^ ad, right ^ ad, ^ ad fn_, <eYt, right, Z] i``] printY V_i ^ i ` ? ^ ad fn_, iZ] b >hi<e Va.Achd T Z [ printY V_>hi<e achd ^ acadd ^ ad T ad fn_, h, a.Achd, Z] printY V_<eYt ^ ad, right ^ ad, ^ ad fn_, <eYt, right, Z] hgg] printY V_h ^ h g ? ^ ad fn_, hZ]b iY Vi S^ hZ [ printY V_iY V i ^ ad S^ h ^ adZ fn_, i, hZ] printY V_acid ^ ad, achd ^ ad, S>ap acid and achd fn_, a.Acid, a.AchdZ] printY V_<eYt ^ ad, right ^ ad, ^ ad fn_, <eYt, right, Z] te1p ^ a.Acid] a.Acid ^ a.Achd] a.Achd ^ te1p] i``] hgg] b b iY V<eYt S hZ [ printY V_iY V<eYt ^ ad S h ^ adZ] right ^ ad, 1id ^ ad fn_, <eYt, h, right, 1idZ] printY V_)eYore 7uickSort <eYt, ^ ad, ac<eYtd ^ ad, achd ^ ad fn_, , a.Ac<eYtd, a.AchdZ] iutput VaZ] 7uickSort Va, <eYt, hZ] b iY Vi S rightZ [ printY V_iY Vi ^ ad S right ^ adZ] <eYt ^ ad, 1id ^ ad fn_, i, right, <eYt, 1idZ] printY V_)eYore 7uickSort right, ^ ad acid ^ ad, acrightd ^ ad fn_, , a.Acid, a.AcrightdZ] iutput VaZ] 7uickSort Va, i, rightZ] b b Noid 7uickSort? VArray aZ [ 7uickSort Va, @, a.n g ?Z] b int 1ain VZ [ Array a] int n ^ B] a.A ^ ne> intcnd] a.n ^ n] int cd ^ [ 2"", 32@, 3*8, B?, ?B" b] int i, k] k ^ @] Yor Vi ^ @] i S n] i``Z [ a.Acid ^ ckd] k``] b iutput VaZ] ?*

xx>riteData Va, _D:ff>?.t t_Z] readData Va, _D:ff>?.t t_Z] 7uickSort? VaZ] printY V_/he Array is AYter Sorting fn_Z] iutput VaZ] >riteData Va, _D:ffiutput.t t_Z] de<ete a.A] getchVZ] b /he Initia< Array ( Cng :an 52u: ac@d ^ 2""] ac?d ^ 32@] ac2d ^ 3*8] ac3d ^ B?] ac"d ^ ?B"] i ^ @] h ^ "] >hi<e Vacid ^ ac@d ^ 2"" S ^ 3*8Z i ^ i ` ? ^ ? >hi<e Vacid ^ ac?d ^ 32@ S ^ 3*8Z i ^ i ` ? ^ 2 >hi<e Vacid ^ ac2d ^ 3*8 S ^ 3*8Z :reak] >hi<e Vachd ^ ac"d ^ ?B" T ^ 3*8Z :reak] iY Vi ^ 2 S^ h ^ "Z ac2d ^ 3*8] ac"d ^ ?B"] S>ap ac2d and ac"d] i ^ i ` ? ^ 3] h ^ h ( ? ^ 3] iY V<eYt ^ @ S h ^ 3Z 7uickSort Va, @, 3Z] iutput: ac@d ^ 2""] ac?d ^ 32@] ac2d ^ ?B"] ac3d ^ B?] ac"d ^ 3*8] i ^ <eYt ^ @] right ^ h ^ 3] 1id ^ V<eYt ` rightZx2 ^ ?] ^ ac1idd ^ ac?d ^ 32@] >hi<e Vacid ^ ac@d ^ 2"" S ^ 32@Z i ^ i ` ? ^ ?] >hi<e Vachd ^ ac3d ^ B? T ^ 32@Z :reak] iY Vi ^ ? S^ h ^ 3Z ac?d ^ 32@] ac3d ^ B?] S>ap ac?d and ac3d] i ^ i ` ? ^ 2] h ^ h ( ? ^ 2] <eYt ^ @] right ^ 3] 1id ^ ?] iY V<eYt ^ @ S h ^ 2Z 7uickSort Va, @, 2Z] iutput: ac@d ^ 2""] ac?d ^ B?] ac2d ^ ?B"] ac3d ^ 32@] ac"d ^ 3*8] i ^ <eYt ^ @] right ^ h ^ 2] 1id ^ V<eYt ` rightZx2 ^ ?] ^ ac1idd ^ ac?d ^ B?] >hi<e Vacid ^ ac@d ^ 2"" S ^ B?Z :reak] >hi<e Vachd ^ ac2d ^ ?B" T ^ B?Z h ^ h ( ? ^ ?] >hi<e Vachd ^ ac?d ^ B? T ^ B?Z :reak] iY Vi ^ @ S^ h ^ ?Z ac@d ^ 2""] ac?d ^ B?] S>ap ac@d and ac?d] i ^ i ` ? ^ ?] h ^ h ( ? ^ @] <eYt ^ @] right ^ 2] 1id ^ ?] ^ ac?d ^ B?] iY V<eYt ^ @ S h ^ @Z :reak] iY Vi ^ ? S right ^ 2Z 7uickSort Va, ?, 2Z] iutput: ac@d ^ B?] ac?d ^ 2""] ac2d ^ ?B"] ac3d ^ 32@] ac"d ^ 3*8]

?.

i ^ <eYt ^ ?] right ^ h ^ 2] 1id ^ V<eYt ` rightZx2 ^ ?] ^ ac1idd ^ ac?d ^ 2""] >hi<e Vacid ^ ac?d ^ 2"" S ^ 2""Z :reak] >hi<e Vachd ^ ac2d ^ ?B" T ^ 2""Z :reak] iY Vi ^ ? S^ h ^ 2Z ac?d ^ 2""] ac2d ^ ?B"] S>ap ac?d and ac2d] i ^ i ` ? ^ 2] h ^ h ( ? ^ ?] iY V<eYt ^ ? S h ^ ?Z :reak] iY Vi ^ 2 S right ^ 2Z :reak] iutput: /he Array aYter sorting: ac@d ^ B?] ac?d ^ ?B"] ac2d ^ 2""] ac3d ^ 32@] ac"d ^ 3*8] AuickSort run :y hand 2 +iNen the Array: ac@d ^ ?2] ac?d ^ 2] ac2d ^ 8] ac3d ^ B] ac"d ^ ?] acBd ^ *] ac*d ^ "] 1id ^ 3] ^ ac3d ^ B S>ap ac@d ^ ?2 and ac*d ^ "] S>ap ac2d ^ 8 and ac"d ^ ?] ac@d ^ "] ac?d ^ 2] ac2d ^ ?] ac3d ^ B] ac"d ^ 8] acBd ^ *] ac*d ^ ?2] AuickSort 5o{n <eYt ^ @] right ^ 2: S>ap ac@d ^ " and ac2d ^ ?] ac@d ^ ?] ac?d ^ 2] ac2d ^ "] ac3d ^ B] ac"d ^ 8] acBd ^ *] ac*d ^ ?2] AuickSort 5o{n <eYt ^ "] right ^ .: 1id ^ B] ^ acBd ^ *] S>ap ac"d ^ * and acBd ^ 8] ac@d ^ ?] ac?d ^ 2] ac2d ^ "] ac3d ^ B] ac"d ^ *] acBd ^ 8] ac*d ^ ?2] AuickSort 5o{n <eYt ^ *] right ^ .: 1id ^ *] ^ ac*d ^ ?2] ac@d ^ ?] ac?d ^ 2] ac2d ^ "] ac3d ^ B] ac"d ^ *] acBd ^ 8] ac*d ^ ?2] AuickSort ct ci ti!n d'a trmn cuu trvc stack Noid 7uickSort Vint Wa, int nZ [ int <eYt, right, te1p] <eYt ^ @] right ^ n g ?] int i, h, ] push V<eYt, rightZ] >hi<e Vtop T @Z [ pop V<eYt, rightZ] ^ acV<eYt ` rightZx2d] i ^ <eYt] h ^ right] >hi<e Vi S hZ [ >hi<e Vacid S Z i``] >hi<e Vachd T Z hgg] iY Vi S^ hZ [ te1p ^ acid] acid ^ achd] achd ^ te1p] i``] hgg] b b xW Und >hi<e Vi S hZ Wx iY Vi S rightZ push Vi, rightZ] iY V<eYt S hZ ?8

ac.d ^ ?B] ac.d ^ ?B] ac.d ^ ?B] ac.d ^ ?B] ac.d ^ ?B]

push V<eYt, hZ] b xW Und >hi<e Vtop T @Z Wx b Noid push Vint <eYt, int rightZ [ stackctopdc@d ^ <eYt] stackctopdc?d ^ right] top``] b Noid pop Vint X<eYt, int XrightZ [ iY Vtop T @Z [ topgg] <eYt ^ stackctopdc@d] right ^ stackctopdc?d] b b She<< Sort A<gorith1 She<<Sort ? Noid She<<Sort Vint Wa, int n, int kZ [ >hi<e Vk T @Z [ Yor Vint i ^ @] i S n] i ^ i ` kZ Yor Vint h ^ i ` k] h S n ( k ` ? ] h ^ h ` kZ [ iY Vacid T achdZ S>apVacid, achdZ] b kgg] b b She<<Sort 2 Noid She<<Sort VArray XaZ [ int hc8d ^ [3", 2?, ?3, 8, B, 3, 2, ?b] int i, p, h, ] Yor Vp ^ @] p S 8] p``Z [ Yor Vi ^ hcpd] i S a.n] i``Z [ ^ a. cid, h ^ i] >hi<e V V S a. c h g hcpd dZ XX Vh T^ hcpdZ Z [ a. chd ^ a. ch g hcpd d] h ^ h g hcpd] b a. chd ^ ] b b b Cerge Sort Noid 1ergeA) Vint Wc, int Wa, int J, int W:, int C Z [ Yor Vint i ^ @, h ^ @, k ^ @] k S J`C] k``Z [ iY Vi ^^ JZ [ cckd ^ :ch``d] continue] b iY Vh ^^ CZ [ cckd ^ aci``d] continue] b cckd ^ Vacid S :chdZ aci``d : :ch``d] b b Noid Cerge Vint Wa, int <eYt, int rightZ [ ?=

int i, h, 1id] 1id ^ V<eYt ` rightZx2] int Wau ] au ^ ne> intcrightd] Yor Vi ^ 1id ` ?] i T <eYt] iggZ au ci g ?d ^ aci g ?d] Yor Vh ^ 1id] h S right] h``Z au cright ` 1id g hd ^ ach`?d] Yor Vint k ^ <eYt] k S^ right] k``Z iY Vau chd S au cidZ ackd ^ au chggd] e<se ackd ^ au ci``d] b Noid CergeSort Vint Wa, int <eYt, int rightZ [ iY Vright S^ <eYtZ return] int 1id ^ Vright ` <eYtZx2] Cergesort Va, <eYt, 1idZ] Cergesort Va, 1id`?, rightZ] Cerge Va, <eYt, rightZ] b Noid CergeSort Vint Wa, int <eYt, int righZ [ int 1id] iY V<eYt S righZ [ 1id ^ V<eYt ` righZx2] CergeSortVa, <eYt, 1idZ] CergeSortVa, 1id ` ?, righZ] Cerge Va, <eYt, righZ] b b Noid Cerge Vint Wa, int <eYt, int rightZ [ int i, h, k, 1id, Wc] c ^ ne> intcrightd] i ^ <eYt] 1id ^ V<eYt ` rightZx2] h ^ 1id ` ?] k ^ <eYt] >hi<e V Vi S^ 1idZ XX Vh S^ rightZ Z [ iY Vacid S achdZ [ cckd ^acid] k``] i``] b e<se [ cckd ^ achd] k``] h``] b b xW IY h ^ right and i S 1id. Wx >hi<e Vi S^ 1idZ [ cckd ^ acid] k``] i``] b xW IY i ^ 1id and h S right. Wx >hi<e Vh S^ rightZ [ cckd ^ achd] k``] h``] b Yor Vi ^ <eYt] i S k] i``Z acid ^ ccid] b

2@

Cerge Sort >ith Struct Rinc<ude Sstdio.hT Rinc<ude Sconio.hT Rinc<ude Sstd<i:.hT Rinc<ude Sti1e.hT struct Array [ int n] int WA] b] Noid Create VArray aZ [ int k] srand Vti1eV @ ZZ] printY V_Untering rando1 Na<ues Yro1 @ to B@@ into array fn_Z] Yor Vk ^ @] k S a.n] k ``Z a.Ackd ^ randVZ a B@@ ` ?] b Noid readData VArray a, char WYna1eZ [ \IFU WY] Y ^ YopenVYna1e,_r`_Z] iY VIYZ [ printYV_Can not read the Yi<e as_,Yna1eZ] return] b YscanYVY,_ad_, Xa.nZ] Yor Vint i ^ @ ] i S a.n ] i``Z YscanYVY,_ad_, Xa.AcidZ] Yc<ose VYZ] b Noid >riteData VArray a, char WYna1eZ [ \IFU WY] Y ^ Yopen VYna1e, _>t_Z] iY VIYZ [ printY V_Can not >rite the Yi<e as fn_, Yna1eZ] return] b YprintY VY, _ad fn_, a.nZ] Yor Vint i ^ @ ] i S a.n ] i``Z YprintY VY, _ad _, a.AcidZ] printY V_fn Data is >riten in Yi<e as fn_,Yna1eZ] Yc<ose VYZ] b Noid Cerge VArray a, int <eYt, int rightZ [ int i, h, k, 1id, Wc] c ^ ne> intca.nd] i ^ <eYt] 1id ^ V<eYt ` rightZx2] h ^ 1id ` ?] k ^ <eYt] >hi<e V Vi S^ 1idZ XX Vh S^ rightZ Z [ iY Va.Acid S a.AchdZ [ cckd ^ a.Acid] k``] i``] b e<se [ cckd ^ a.Achd] k``] h``]b 2?

b >hi<e Vi S^ 1idZ [ cckd ^ a.Acid] k``] i``] b >hi<e Vh S^ rightZ [ cckd ^ a.Achd] k``] h``] b Yor Vi ^ <eYt] i S k] i``Z a.Acid ^ ccid] b Noid 1ergeSort VArray a, int <eYt, int rightZ [ int 1id] iY V<eYt S rightZ [ 1id ^ V<eYt ` rightZx2] 1ergeSortVa, <eYt, 1idZ] 1ergeSortVa, 1id ` ?, rightZ] Cerge Va, <eYt, rightZ] b b Noid iutput VArray aZ [ int i] Yor Vi ^ @] i S a.n] i``Z [ printY V_acadd ^ ad fn_, i, a.AcidZ] b b int 1ain VZ [ Array a] printYV_so phan tu cua 1ang: fn_Z] scanYV_ad_, Xa.nZ] a.A ^ ne> int ca.nd] CreateVaZ] iutput VaZ] >riteData Va, jD:ff>?.t tkZ] readData Va, jD:ff>?.t tkZ] 1ergeSort Va, @, a.n g ?Z] printY V_/he Array AYter Sorting fn_Z] iutput VaZ] >riteData Va, jD:ffiutput.t tkZ] syste1 VjpausekZ] b CergeSort 2 Rinc<ude Sstdio.hT Rinc<ude Sconio.hT Rinc<ude Sstd<i:.hT Rinc<ude Sti1e.hT struct Array [ int n] int W)] b] Noid Create VArray XaZ [ int i, k?] k? ^ @] int c?@d ^ [ ==2, =8=, =.*, B*., "B=, .8?, *B3, *.=, ..., ..= b] Yor Vi ^ @] i S a.n] i ``Z [ 22

a.)cid ^ ck?d] k?``] b b int Cerge VArray a, int <eYt, int 1id, int rightZ [ int i, h, t] int Cc?@@d] i ^ <eYt] h ^ 1id ` ?] t ^ ?] >hi<e V Vi S^ 1idZ XX Vh S^ rightZ Z [ iY Va.)cid S a.)chdZ [ Cctd ^ a.)cid] i``] t``] b e<se [ Cctd ^ a.)chd] h``] t``] b b Yor V] i S^ 1id] i``, t``Z Cctd ^ a.)cid] Yor V] h S^ right] h``, t``Z Cctd ^ a.)chd] Yor Vint k ^ <eYt] k S^ right] k``Z a.)ckd ^ Cck g <eYt ` ?d] b Noid CergeSort VArray a, int <eYt, int rightZ [ iY V<eYt S rightZ [ int 1id ^ V<eYt ` rightZx2] CergeSort Va, <eYt, 1idZ] CergeSort Va, 1id`?, rightZ] Cerge Va, <eYt, 1id, rightZ] b b Noid iutput VArray aZ [ int i] Yor Vi ^ @] i S a.n] i``Z printY VjaBdk, a.)cidZ] printY VjfnkZ] b int 1ainVZ [ Array a] a.n ^ ?@] a.) ^ ne> int ca.nd] CreateVaZ] printY VjCang :an dau fnkZ] iutputVaZ] CergeSortVa, @, a.ng?Z] printY VjCang sau khi sap fnkZ] iutputVaZ] b CergeSort run :y hand Rinc<ude Sstdio.hT Rinc<ude Sconio.hT Rinc<ude Sstd<i:.hT Rinc<ude Sti1e.hT struct Array [ int n] int WA] b] 23

Noid Create VArray aZ [ int k] srand Vti1eV @ ZZ] printY V_Untering rando1 Na<ues Yro1 @ to B@@ into array fn_Z] Yor Vk ^ @] k S a.n] k ``Z a.Ackd ^ randVZ a B@@ ` ?] b Noid readData VArray a, char WYna1eZ [ \IFU WY] Y ^ YopenVYna1e,_r`_Z] iY VIYZ [ printYV_Can not read the Yi<e as_,Yna1eZ] return] b YscanYVY,_ad_, Xa.nZ] Yor Vint i ^ @ ] i S a.n ] i``Z YscanYVY,_ad_, Xa.AcidZ] Yc<ose VYZ] b Noid >riteData VArray a, char WYna1eZ [ \IFU WY] Y ^ Yopen VYna1e, _>t_Z] iY VIYZ [ printY V_Can not >rite the Yi<e as fn_, Yna1eZ] return] b YprintY VY, _ad fn_, a.nZ] Yor Vint i ^ @ ] i S a.n ] i``Z YprintY VY, _ad _, a.AcidZ] printY V_fn Data is >riten in Yi<e as fn_,Yna1eZ] Yc<ose VYZ] b Noid iutput VArray aZ [ int i] Yor Vi ^ @] i S a.n] i``Z [ printY V_acadd ^ ad fn_, i, a.AcidZ] b b Noid Cerge VArray a, int <eYt, int rightZ [ int i, h, k, 1id, Wc] c ^ ne> intca.nd] i ^ <eYt] 1id ^ V<eYt ` rightZx2] h ^ 1id ` ?] k ^ <eYt] >hi<e V Vi S^ 1idZ XX Vh S^ rightZ Z [ iY Va.Acid S a.AchdZ [ cckd ^ a.Acid] k``] i``] b e<se [ cckd ^ a.Achd] k``] h``]b b >hi<e Vi S^ 1idZ [ cckd ^ a.Acid] k``] i``] b >hi<e Vh S^ rightZ [ cckd ^ a.Achd] k``] h``] b 2"

Yor Vi ^ <eYt] i S k] i``Z a.Acid ^ ccid] b Noid 1ergeSort VArray a, int <eYt, int rightZ [ int 1id] iY V<eYt S rightZ [ 1id ^ V<eYt ` rightZx2] 1ergeSort Va, <eYt, 1idZ] 1ergeSort Va, 1id ` ?, rightZ] Cerge Va, <eYt, rightZ] printY Vj1ergeSort fnkZ] iutput VaZ] b b int 1ain VZ [ Array a] printYV_so phan tu cua 1ang: fn_Z] scanYV_ad_, Xa.nZ] a.A ^ ne> int ca.nd] CreateVaZ] iutput VaZ] >riteData Va, jD:ff>?.t tkZ] readData Va, jD:ff>?.t tkZ] 1ergeSort Va, @, a.n g ?Z] printY V_/he Array AYter Sorting fn_Z] iutput VaZ] >riteData Va, jD:ffiutput.t tkZ] getchVZ] b CergeSort run :y hand: /he Initia< Array: ac@d ^ "=*] ac?d ^ 33] ac2d ^ ??=] ac3d ^ "**] ac"d ^ 2B.] /ch 1ng: k ^ ? :c@d ^ "=*] :c?d ^ ??=] :c2d ^ 2B.] cc@d ^ 33] cc?d ^ "**] /rn 1ng: ac@d ^ 33] ac?d ^ "=*] ac2d ^ ??=] ac3d ^ "**] ac"d ^ 2B.] /ch 1ng: k ^ kW2 ^ 2 :c@d ^ 33] :c?d ^ "=*] :c2d ^ 2B.] cc@d ^ ??=] cc?d ^ "**] /rn 1ng: ac@d ^ 33] ac?d ^ ??=] ac2d ^ "**] ac3d ^ "=*] ac"d ^ 2B.] /ch 1ng: k ^ kW2 ^ " :c@d ^ 33] :c?d ^ ??=] :c2d ^ "**] :c3d ^ "=* cc@d ^ 2B.] /rn 1ng: ac@d ^ 33] ac?d ^ ??=] ac2d ^ 2B.] ac3d ^ "**] ac"d ^ "=*] Dadi Sort Dadi Sort VA, n, kZ Input: Cng A ct n ph2n t3, ct tQi 5a k ch sQ. 2B

iutput: Cng A 5$Mc sp !p. h~i t{o ?@ ngn chza )c@..=d rnng] Yor Vt ^ @] t S k g ?] t``Z do Yor Vh ^ @] h S n g ?] h``Z do /hm1 Achd NGo )cDigitVAchd, tZd] Yor Vi ^ @] i S =] i``Z do Fuy ng$Mc cc ph2n t3 t )cid 5$a NGo A return] /hut ton Digit Vn, kZ Input: sQ nguymn n NG k. iutput: ch sQ t{i N, trH k coa sQ n. Na<ue ^ ?] Yor Vi ^ ?] i S k ( ?] i``Z Na<ue ^ Na<ueW?@] return VnxNa<ueZa?@ Dadi Sort Rinc<ude Sstdio.hT Rinc<ude Sconio.hT Rinc<ude Sstd<i:.hT Rinc<ude Sti1e.hT Noid Dadi Sort Vint Wa, int nZ] int CountDigit Vint nZ] Noid iutput Vint Wa, int XnZ] int +etCa Vint WA, int nZ] Noid S>ap Vint Xa, int X:Z] Noid Dando1 Vint Wa, int XnZ] int +etDigit Vint n, int tZ] Noid Send2)o Vint WA, int n, int W:c?@d, int nu1c?@d, int tZ] Noid +eta<ue Vint WA, int W:c?@d, int nnc?@dZ] Noid 1ain VZ [ int Wa, n] printY V_Jhap Nao so phan tu cua 1ang: fn_Z] scanY V_ad_, XnZ] a ^ ne> intcnd] Dando1 Va, nZ] iutput Va, nZ] Dadi Sort Va, nZ] printY V_Cang sau khi sap ep fn_Z] iutput Va, nZ] getchVZ] b Noid Dadi Sort Vint Wa, int nZ [ int i] int W)o c?@d] int nu1:erc?@d] Yor V i ^ @] i S ?@] i``Z [ )o cid ^ ne> int cnd] 2*

iY V)o cid ^^ JFFZ [ printYV_Jot enough_Z] return] b nu1:ercid ^ @] b int nn ^ CountDigit V+etCa Va, nZZ] Yor Vi ^ @] i S nn] i``Z [ Send2)o Va, n, )o , nu1:er, iZ] +eta<ue Va, )o , nu1:erZ] b b int +etCa Vint WA, int nZ [xxti1 phan tu <on nhat int 1a ^ Ac@d] YorVint i ^ ?] i S n] i``Z iY V1a S AcidZ 1a ^ Acid] return 1a ] b int CountDigit Vint nZ [ xx de1 so chu so cua ? phan tu int count ^ @] >hi<eVn T @Z [ count``] n ^ nx?@] b return count] b int +etDigit Vint n, int tZ [ xx <ay gia tri tung hang int Na<ue ^ ?] Yor Vint i ^ @] i S t] i``Z Na<ue ^ Na<ue W ?@] return V VnxNa<ueZa?@ Z] b Noid Send2)o Vint WA, int n, int W:c?@d, int nu1c?@d, int tZ [ xx dua Nao hop Yor Vint i ^ @] i S n] i``Z [ int tt ^ +etDigitVAcid, tZ] :cttdcnu1cttd``d ^ Acid] b b Noid +eta<ueVint WA, int W:c?@d, int nnc?@dZ [ xx <ay gia tri ra int h ^ @] YorVint i ^ @] i S ?@] i``Z [ iY V nncid I^ @ Z [ Yor Vint k ^ @] k S nncid] k``Z Ach``d ^ :cidckd] nncid ^ @] b b b Noid iutput Vint Wa, int XnZ [ int i] Yor Vi ^ @] i S n] i``Z [ 2.

printY V_tcadd ^ ad fn_, i, acidZ] b b Noid S>ap Vint Xa, int X:Z [ int te1p ^ a] a ^ :] : ^ te1p] b Noid Dando1 Vint Wa, int XnZ [ int k] printYV_1ang co ad phan tu fn_, nZ] srand Vti1eV @ ZZ] printY V_Untering rando1 Na<ues Yro1 @ to B@@ into array fn_Z] Yor Vk ^ @] k S^ n] k ``Z ackd ^ randVZ a B@@ `?] b Dadi Sort >ith Struct Rinc<ude Sstdio.hT Rinc<ude Sstd<i:.hT Rinc<ude Sti1e.hT struct Array [ int n] int WA] b] Noid Create VArray XaZ [ int k] srand Vti1eV @ ZZ] printY V_Untering rando1 Na<ues Yro1 @ to B@@ into array fn_Z] Yor Vk ^ @] k S a.n] k ``Z a.Ackd ^ randVZ a B@@`?] b int getCa VArray aZ [xxti1 phan tu <on nhat int 1a ^ a.Ac@d] Yor Vint i ^ ?] i S a.n] i``Z iY V1a S a.AcidZ 1a ^ a.Acid] return 1a ] b int countDigit Vint nZ [ xx de1 so chu so cua ? phan tu int count ^ @] >hi<e Vn T @Z [ count``] n ^ nx?@] b return count] b int getDigit Vint n, int tZ [ xx <ay gia tri tung hang int Na<ue ^ ?] Yor Vint i ^ @] i S t] i``Z Na<ue ^ Na<ue W ?@] 28

return V VnxNa<ueZa?@ Z] b xxggggggggggggggggggggggggggggggggggggggggggggggggggggg Noid send2)o VArray a, int W:c?@d, int nu1:erc?@d, int tZ [ xx dua Nao hop Yor Vint i ^ @] i S a.n] i``Z [ int t? ^ getDigit Va.Acid, tZ] :ct?dcnu1:erct?d``d ^ a.Acid] b b Noid geta<ue VArray a, int W:c?@d, int nu1:erc?@d Z [ xx <ay gia tri ra int h ^ @] Yor Vint i ^ @] i S ?@] i``Z [ iY Vnu1:ercid I^ @Z [ Yor Vint k ^ @] k S nu1:ercid] k``Z a.Ach``d ^ :cidckd] nu1:ercid ^ @] b b b xxggggggggggggggggggggggggggggggggggggggggggggggggggggg Noid radi Sort VArray XaZ [ int i] int W:o c?@d] int nu1:erc?@d] Yor V i ^ @] i S ?@] i``Z [ :o cid ^ ne> int ca.nd] iY V:o cid ^^ JFFZ [ printY V_Jot enough_Z] e itV@Z] b nu1:er cid ^ @] b int n? ^ countDigit VgetCa VaZ Z] Yor Vi ^ @] i S n?] i``Z [ send2)o Va, :o , nu1:er, iZ] geta<ue Va, :o , nu1:erZ] b b Noid iutput VArray aZ [ int i] Yor Vi ^ @] i S a.n] i``Z [ printY V_acadd ^ ad fn_, i, a.AcidZ] b b Noid 1ain VZ [ Array a] printYV_so phan tu cua 1ang: fn_Z] scanYV_ad_, Xa.nZ] a.A ^ ne> int ca.nd] Create VaZ] iutput VaZ] radi Sort VaZ] printY V_/he array aYter sorting fn_Z] iutput VaZ] syste1 VjpausekZ] b Dadi Sort >ith C<ass Rinc<ude Sstdio.hT 2=

Rinc<ude Sstd<i:.hT Rinc<ude Sti1e.hT c<ass Array [ int W , n] pu:<ic: ArrayVZ] ArrayVZ] Noid radi SortVZ] Noid iutputVZ] int getCa VZ] Noid CreateVZ] Noid send2)o Vint W:c?@d, int nu1:erc?@d, int tZ] Noid geta<ue Vint W:c?@d, int nu1:erc?@d Z] b] xxggggggggggggggggggggggggggggggggggggggggggggggggggggg Array :: ArrayVZ [ int k] srand Vti1eV @ ZZ] printYV_so phan tu cua 1ang: fn_Z] scanYV_ad_, XnZ] ^ ne> int cnd] Yor Vk ^ @] k S n] k ``Z ckd ^ randVZ a B@@`?] b Array :: ArrayVZ [ iY V I^ JFFZ de<ete ] b int countDigit Vint nZ [ xx de1 so chu so cua ? phan tu int count ^ @] >hi<e Vn T @Z [ count``] n ^ nx?@] b return count] b Noid Array :: radi Sort VZ [ int i] int W)o c?@d] int nu1:erc?@d] Yor V i ^ @] i S ?@] i``Z [ )o cid ^ ne> int cnd] iY V)o cid ^^ JFFZ [ printY V_Jot enough_Z] e itV@Z] b nu1:er cid ^ @] b int n? ^ countDigit V getCa VZ Z] Yor Vi ^ @] i S n?] i``Z [ send2)o V)o , nu1:er, iZ] geta<ueV)o , nu1:erZ] b b 3@

xxggggggggggggggggggggggggggggggggggggggggggggggggggggg int Array :: getCa VZ [xxti1 phan tu <on nhat int 1a ^ c@d] Yor Vint i ^ ?] i S n] i``Z iY V1a S cidZ 1a ^ cid] return 1a ] b int getDigit Vint n, int tZ [ xx <ay gia tri tung hang int Na<ue ^ ?] Yor Vint i ^ @] i S t] i``Z Na<ue ^ Na<ue W ?@] return V VnxNa<ueZa?@ Z] b xxggggggggggggggggggggggggggggggggggggggggggggggggggggg Noid Array :: send2)o Vint W:c?@d, int nu1:erc?@d, int tZ [ xx dua Nao hop Yor Vint i ^ @] i S n] i``Z [ int t? ^ getDigit V cid, tZ] :ct?dcnu1:erct?d``d ^ cid] b b Noid Array :: geta<ue Vint W:c?@d, int nu1:erc?@d Z [ xx <ay gia tri ra int h ^ @] Yor Vint i ^ @] i S ?@] i``Z [ iY Vnu1:ercid I^ @Z [ Yor Vint k ^ @] k S nu1:ercid] k``Z ch``d ^ :cidckd] nu1:ercid ^ @] b b b Noid Array :: iutput VZ [ int i] Yor Vi ^ @] i S n] i``Z [ printY V_acadd ^ ad fn_, i, cidZ] b b int 1ain VZ [ Array a] a.iutput VZ] a.radi Sort VZ] printY V_/he array aYter sorting fn_Z] a.iutput VZ] syste1 VjpausekZ] b Dadi Sort run :y hand /he initia< Array: .@? ?.2B === =?.@ 32B2 "B?8 .@@= ?"2" "28 ?23= 8"2B .@?3. Sp !p gi1 d2n: g #h-n <K theo hGng 5%n N,, 5$a cc sQ NGo <K theo thz t' t phi sang tri. FK @: =?.@ FK ?: @.@? 3?

FK 2: 32B2 FK 3: .@?3 FK ": ?"2" FK B: 8"2B ?.2B FK *: Ju<< FK .: Ju<< FK 8: @"28 "B?8 FK =: ?23= .@@= @=== g Fuy cc sQ ra t FK =, theo thz t' t phi sang tri. @=== .@@= ?23= "B?8 @"28 ?.2B 8"2B ?"2" .@?3 32B2 @.@? =?.@. g #h-n <K theo hGng chc, 5$a cc sQ NGo <K theo thz t' t phi sang tri. FK @: @.@? .@@= FK ?: .@?3 "B?8 FK 2: ?"2" 8"2B ?.2B @"28 FK 3: ?23= FK ": Ju<< FK B: 32B2 FK *: Ju<< FK .: =?.@ FK 8: Ju<< FK =: @=== g Fuy cc sQ ra t FK =, theo thz t' t phi sang tri. @=== =?.@ 32B2 ?23= @"28 ?.2B 8"2B ?"2" "B?8 .@?3 .@@= @.@?. g #h-n <K theo hGng tr1, 5$a cc sQ NGo <K theo thz t' t phi sang tri. FK @: .@@= .@?3 FK ?: =?.@ FK 2: ?23= 32B2 FK 3: Ju<< FK ": ?"2" 8"2B @"28 FK B: "B?8 FK *: Ju<< FK .: @.@? ?.2B FK 8: Ju<< FK =: @=== g Fuy cc sQ ra t FK =, theo thz t' t phi sang tri. @=== ?.2B @.@? "B?8 @"28 8"2B ?"2" 32B2 ?23= =?.@ .@?3 .@@=. g #h-n <K theo hGng tr1, 5$a cc sQ NGo <K theo thz t' t phi sang tri. FK @: @"28 @.@? @=== FK ?: ?23= ?"2" ?.2B FK 2: Ju<< FK 3: 32B2 FK ": "B?8 32

FK B: Ju<< FK *: Ju<< FK .: .@@= .@?3 FK 8: 8"2B FK =: =?.@ g Fuy cc sQ ra t FK =, theo thz t' t phi sang tri. =?.@ 8"2B .@?3 .@@= "B?8 32B2 ?.2B ?"2" ?23= @=== @.@? @"28. +ii thut Eeap Sort P,nh ngha Eeap: g +i s3 Ot tr$ng hMp sp !p tng d2n, khi 5t Eeap 5$Mc 5,nh ngha <G ? d|y cc ph2n t3 ac?d, ac2d,..., acrd thLa cc 7uan h6 Nwi 1;i i c?, rd: acid T^ ac2id and acid T^ ac2i`?d] ac2id, ac2i`?d <G cc ph2n t3 <imn 5wi coa acid. Eeap ct cc tHnh chut sau: g /Hnh chut ?: J!u ac?d, ac2d,..., acrd <G ? Eeap th0 khi ct :L ? sQ ph2n t3 ~ 2 52u coa Eeap, d|y con cpn <{i Nn <G ? Eeap. g /Hnh chut 2: J!u ac?d, ac2d,..., acrd <G ? Eeap th0 ph2n t3 ac?d V52u EeapZ <uKn <G ph2n t3 <wn nhut trong Eeap. g /Hnh chut 3: C;i d|y ackd, ack`?d,..., acrd Nwi ac2kd T acrd <G ? Eeap. +ii thut Eeap Sort: +iai 5o{n ?: Ei6u chsnh d|y sQ :an 52u thGnh Eeap. +iai 5o{n 2: Sp !p d|y sQ d'a trmn Eeap. g )$wc ?: P$a ph2n t3 <wn nhut Nr N, trH 5vng ~ cuQi d|y. i ^ ng?] S>ap Vacid, ac@dZ] g )$wc 2: Fo{i :L ph2n t3 <wn nhut ra khLi Eeap: i ^ i ( ?] Ei6u chsnh ph2n cpn <{i coa d|y t ac@d, ac2d,..., acid thGnh ? Eeap. g )$wc 3: J!u i T @ VEeap cpn ph2n t3Z: Flp <{i :$wc 2. J!u i ^ @: Dng. Code Eeap Sort Noid InsertEeap Vint WA, int <eYt, int rightZ [ int p] p ^ 2W<eYt] iY Vp T rightZ return] iY Vp S rightZ iY VAcpd S Acp`?dZ p ^ p`?] iY VAc<eYtd S AcpdZ [ S>ap VAc<eYtd, AcpdZ] InsertEeap VA, p, rightZ] b b Noid CreateEeap Vint WA, int nZ [ int i] int h ^ Vn ` ?Zx2 g ?] 33

Yor Vi ^ h] @ S^ i] iggZ InsertEeapVA, i, ng?Z] b Noid EeapSort Vint WA, int nZ [ CreateEeap VA, nZ] int i] Yor Vi ^ n g ?] i T @] iggZ [ S>ap VAc@d, AcidZ] InsertEeapVA, @, i g ?Z] b b EeapSort run :y hand Rinc<ude Sstdio.hT Rinc<ude Sconio.hT Rinc<ude Sstd<i:.hT Rinc<ude Sti1e.hT struct Array [ int W ] int n] b] Noid iutput VArray aZ [ int i] Yor Vi ^ @] i S a.n] i``Z printY V_acadd ^ ad fn_, i, a. cidZ] b Noid Dando1 VArray aZ [ int k] printYV_1ang co ad phan tu fn_, a.nZ] YorVk ^ @] k S a.n] k ``Z a. ckd ^ randVZ a ?@@ `?] b Noid S>ap Vint Xa, int X:Z [ int te1p ^ a] a ^ :] : ^ te1p] b Noid InsertEeap VArray Xa, int <eYt, int rightZ [ int p] p ^ 2W<eYt] iY Vp T rightZ [ printY V_iY Vp ^ ad T right ^ adZ return fn_, p, rightZ] return] b printY V_<eYt ^ ad, p ^ 2W<eYt ^ ad fn_, <eYt, pZ] iY Vp S rightZ iY Va. cpd S a. cp`?dZ [ printY V_iY p ^ ad S right ^ ad fn_, p, rightZ] printY V_iY acpd ^ ad S acp`?d ^ ad fn_, a. cpd, a. cp`?dZ] printY V_p ^ p ` ? ^ ad fn_, p ` ?Z] p ^ p`?] b 3"

iY Va. c<eYtd S a. cpdZ [ printY V_iY Vacadd ^ ad S acadd ^ adZ fn_, <eYt, a. c<eYtd, p, a. cpdZ] printY V_S>ap ac<eYtd ^ acadd ^ ad and acpd ^ acadd ^ ad fn_, <eYt, a. c<eYtd, p, a. cpdZ] S>ap Va. c<eYtd, a. cpdZ] printY V_InsertEeap Va, ad, adZ fn_, p, rightZ] InsertEeap Va, p, rightZ] b e<se [ printY V_iY Vacadd T acaddZ return] fn_, <eYt, pZ] b return] b Noid CreateEeap VArray XaZ [ int i] int h ^ Va.n ` ?Zx2 g ?] printY V_Create Eeap fn_Z] Yor Vi ^ h] i T^ @] iggZ [ printY V_i ^ ad fn_, iZ] printY V_InsertEeap Va, ad, "Z fn_, iZ] InsertEeap Va, i, a.ng?Z] xxprintY V_<eYt ^ ad, right ^ ad fn_, i, a.ng?Z] iutput VaZ] b b Noid EeapSort VArray XaZ [ CreateEeapVaZ] int i] Yor Vi ^ a.ng?] i T @] iggZ [ printY V_EeapSort ad fn_, iZ] printY V_S>ap ac@d ^ ad and acadd ^ ad fn_, a. c@d, i, a. cidZ] S>ap Va. c@d, a. cidZ] iutput VaZ] printY V_InsertEeap Va, @, adZ fn_, ig?Z] InsertEeap Va, @, ig?Z] iutput VaZ] b b int 1ain VZ [ Array a] int i, k, n] n ^ B] k ^ @] a.n ^ n] a. ^ ne> intcnd] int ?cd ^ [ 8=, 3?, 8, 3*, "B b] Yor Vi ^ @] i S n] i``Z [ a. cid ^ ?ckd] k``] b iutputVaZ] EeapSortVaZ] printY V_Cang sau khi sap ep fn_Z] iutputVaZ] b /he initia< Array: ac@d ^ 8=, ac?d ^ 3?, ac2d ^ 8, ac3d ^ 3*, ac"d ^ "B. i ^ VB ` ?Zx2 ( ? ^ 2] 3B

Create Eeap i ^ 2: InsertEeap Va, 2, "Z: FeYt ^ 2, p ^ 2W<eYt ^ ", IY Vac<eYtd ^ ac2d ^ 8 S acpd ^ ac"d ^ "BZ S>ap ac2d ^ 8 and ac"d ^ "B. <eYt ^ p ^ "] InsertEeap Va, ", "Z: <eYt ^ "] p ^ 2W<eYt ^ 8] IY Vp ^ 8 T right ^ "Z return] iutput: ac@d ^ 8=, ac?d ^ 3?, ac2d ^ "B, ac3d ^ 3*, ac"d ^ 8. Create Eeap i ^ ?: InsertEeap Va, ?, "Z: FeYt ^ ?, p ^ 2W<eYt ^ 2, IY Vac<eYtd ^ ac?d ^ 3? S acpd ^ ac2d ^ "BZ S>ap ac?d ^ 3? and ac2d ^ "B. InsertEeap Va, 2, "Z: <eYt ^ 2] p ^ 2W<eYt ^ "] IY Vac2d T ac"dZ return] iutput: ac@d ^ 8=, ac?d ^ "B, ac2d ^ 3?, ac3d ^ 3*, ac"d ^ 8. Create Eeap i ^ @: InsertEeap Va, @, "Z: FeYt ^ @, p ^ 2W<eYt ^ @, IY Vac<eYtd ^ ac@d ^ 8= S acpd ^ ac@d ^ 8=Z :reak] iutput: ac@d ^ 8=, ac?d ^ "B, ac2d ^ 3?, ac3d ^ 3*, ac"d ^ 8. EeapSort i ^ ": S>ap ac@d ^ 8= and ac"d ^ 8. ac@d ^ 8, ac?d ^ "B, ac2d ^ 3?, ac3d ^ 3*, ac"d ^ 8=. InsertEeap Va, @, 3Z: <eYt ^ @, p ^ 2W<eYt ^ @, right ^ i ( ? ^ 3] IY Vp ^ @ S right ^ 3Z IY Vacpd ^ 8 S acp`?d ^ "BZ p ^ p ` ? ^ ?] <eYt ^ @, p ^ ?] IY Vac<eYtd ^ ac@d ^ 8 S acpd ^ ac?d ^ "BZ S>ap ac@d ^ 8 and ac?d ^ "B. InsertEeap Va, ?, 3Z: <eYt ^ ?, p ^ 2W<eYt ^ 2] IY Vp ^ 2 S right ^ 3Z IY Vacpd ^ 3? S acp`?d ^ 3*Z 3*

p ^ p ` ? ^ 3] <eYt ^ ?, p ^ 3] IY Vac<eYtd ^ ac?d ^ 8 S acpd ^ ac3d ^ 3*Z S>ap ac?d ^ 8 and ac3d ^ 3*. InsertEeap Va, 3, 3Z: IY Vp ^ * T right ^ 3Z :reak] iutput: ac@d ^ "B, ac?d ^ 3*, ac2d ^ 3?, ac3d ^ 8, ac"d ^ 8=. EeapSort i ^ 3: S>ap ac@d ^ "B and ac3d ^ 8. ac@d ^ 8, ac?d ^ 3*, ac2d ^ 3?, ac3d ^ "B, ac"d ^ 8=. InsertEeap Va, @, 2Z: <eYt ^ @, p ^ 2W<eYt ^ @, right ^ i ( ? ^ 2] IY Vp ^ @ S right ^ 2Z IY Vacpd ^ 8 S acp`?d ^ 3*Z p ^ p ` ? ^ ?] <eYt ^ @, p ^ ?] IY Vac<eYtd ^ ac@d ^ 8 S acpd ^ ac?d ^ 3*Z S>ap ac@d ^ 8 and ac?d ^ 3*. InsertEeap Va, ?, 2Z: <eYt ^ ?, p ^ 2W<eYt ^ 2] IY Vp ^ 2 S right ^ 2Z :reak] IY Vac<eYtd ^ ac?d ^ 8 S acpd ^ ac2d ^ 3?Z S>ap ac?d ^ 8 and ac2d ^ 3?. InsertEeap Va, 2, 2Z: <eYt ^ 2, p ^ 2W<eYt ^ "] IY Vp ^ " T right ^ 2Z :reak] iutput: ac@d ^ 3*, ac?d ^ 3?, ac2d ^ 8, ac3d ^ "B, ac"d ^ 8=. EeapSort i ^ 2: S>ap ac@d ^ 3* and ac2d ^ 8. ac@d ^ 8, ac?d ^ 3?, ac2d ^ 3*, ac3d ^ "B, ac"d ^ 8=. InsertEeap Va, @, ?Z: <eYt ^ @, p ^ 2W<eYt ^ @] right ^ i ( ? ^ ?] IY Vp ^ @ S right ^ ?Z IY Vacpd ^ 8 S acp`?d ^ 3?Z p ^ p ` ? ^ ?] <eYt ^ @, p ^ ?] IY Vac<eYtd ^ ac@d ^ 8 S acpd ^ ac?d ^ 3?Z S>ap ac@d ^ 8 and ac?d ^ 3?. InsertEeap Va, ?, ?Z: <eYt ^ ?, p ^ 2W<eYt ^ 2] IY Vp ^ 2 T right ^ ?Z :reak] iutput: ac@d ^ 3?, ac?d ^ 8, ac2d ^ 3*, ac3d ^ "B, ac"d ^ 8=. 3.

EeapSort i ^ ?: S>ap ac@d ^ 3? and ac?d ^ 8. ac@d ^ 8, ac?d ^ 3?, ac2d ^ 3*, ac3d ^ "B, ac"d ^ 8=. Sp !p tng /he initia< Array: ac@d ^ 8=, ac?d ^ 3?, ac2d ^ 8, ac3d ^ 3*, ac"d ^ "B. Create Eeap: g D|y ct B ph2n t3, ch;n ph2n t3 1id ^ VB ` ?Zx2 ( ? ^ 2. iq1 tra ph2n t3 ac2d phi <wn h%n ph2n t3 ac"d: S>apVac2d, ac"dZ] ac@d ^ 8=, ac?d ^ 3?, ac2d ^ "B, ac3d ^ 3*, ac"d ^ 8. Cho igg ^ ?] iq1 tra ph2n t3 ac?d phi <wn h%n ph2n t3 ac2d NG ac3d, ch;n ph2n t3 <wn h%n trong 2 ph2n t3 ac2d, ac3d 5q S>ap Nwi ac?d. S>apVac?d, ac2dZ] ac@d ^ 8=, ac?d ^ "B, ac2d ^ 3?, ac3d ^ 3*, ac"d ^ 8. Cho igg ^ @] iq1 tra ph2n t3 ac@d phi <wn h%n ph2n t3 ac?d: Pvng. Eeap Sort i ^ ": g P$a ph2n t3 <wn nhut ac@d Nr cuQi d|y. S>apVac@d, ac"dZ. ac@d ^ 8, ac?d ^ "B, ac2d ^ 3?, ac3d ^ 3*, ac"d ^ 8=. g Create Eeap t ac@d 5!n ac3d: g ac?d phi <wn h%n ac2d NG ac3d] ac@d phi <wn h%n ac?d] S>apVac@d, ac?dZ] ac@d ^ "B, ac?d ^ 8, ac2d ^ 3?, ac3d ^ 3*, ac"d ^ 8=. g iq1 tra <{i ac?d phi <wn h%n ac2d NG ac3d] Ch;n sQ <wn h%n trong ac2d NG ac3d S>ap Nwi ac?d] S>apVac?d, ac3dZ] ac@d ^ "B, ac?d ^ 3*, ac2d ^ 3?, ac3d ^ 8, ac"d ^ 8=. Eeap Sort i ^ 3: g P$a ph2n t3 <wn nhut ac@d Nr cuQi d|y. S>apVac@d, ac3dZ. ac@d ^ 8, ac?d ^ 3*, ac2d ^ 3?, ac3d ^ "B, ac"d ^ 8=. g Create Eeap t ac@d 5!n ac2d: g ac?d phi <wn h%n ac2d] ac@d phi <wn h%n ac?d] S>apVac@d, ac?dZ] ac@d ^ 3*, ac?d ^ 8, ac2d ^ 3?, ac3d ^ "B, ac"d ^ 8=. g iq1 tra <{i ac?d phi <wn h%n ac2d] S>apVac?d, ac2dZ] ac@d ^ 3*, ac?d ^ 3?, ac2d ^ 8, ac3d ^ "B, ac"d ^ 8=. Eeap Sort i ^ 2: g P$a ph2n t3 <wn nhut ac@d Nr cuQi d|y. S>apVac@d, ac2dZ. ac@d ^ 8, ac?d ^ 3?, ac2d ^ 3*, ac3d ^ "B, ac"d ^ 8=. 38

g Create Eeap t ac@d 5!n ac?d: g ac@d phi <wn h%n ac?d] S>apVac@d, ac?dZ] ac@d ^ 3?, ac?d ^ 8, ac2d ^ 3*, ac3d ^ "B, ac"d ^ 8=. Eeap Sort i ^ ?: g P$a ph2n t3 <wn nhut ac@d Nr cuQi d|y. S>apVac@d, ac?dZ. ac@d ^ 8, ac?d ^ 3?, ac2d ^ 3*, ac3d ^ "B, ac"d ^ 8=. FinkedFist ? Rinc<ude Sstdio.hT Rinc<ude Sconio.hT Rinc<ude Sstd<i:.hT Rinc<ude Sti1e.hT Rinc<ude Sctype.hT struct Jode [ int ] struct Jode WJe t] b] struct FinkedFist [ Jode WEead] Jode W/ai<] b] Noid insertEead VFinkedFist X<ist, int Z [ Jode Wp] p ^ ne> Jode] pgT ^ ] pgTJe t ^ JFF] iY V<ist.Eead ^^ JFFZ [ <ist.Eead ^ p] <ist./ai< ^ <ist.Eead] b e<se [ pgTJe t ^ <ist.Eead] <ist.Eead ^ p] b b Noid insert/ai< VFinkedFist X<ist, int Z [ Jode Wp] p ^ ne> Jode] pgT ^ ] pgTJe t ^ JFF] iY V<ist.Eead ^^ JFFZ [ <ist.Eead ^ p] <ist./ai< ^ <ist.Eead] b e<se [ <ist./ai<gTJe t ^ p] <ist./ai< ^ p] b b Noid Dando1 Vint W , int XnZ [ srand Vti1eV@Z Z] Yor Vint i ^ @] i S n] i``Z cid ^ randVZ a B@@] b Noid createFist VFinkedFist X<ist, int W , int XnZ [ Yor Vint i ^ ng?] i T^ @] iggZ insertEead V<ist, cidZ] b 3=

Noid iutput VFinkedFist <istZ [ Jode Wp ^ <ist.Eead] >hi<e Vp I^ JFFZ [ printY V_ ad fn_, p gT Z] p ^ p gT Je t] b b Noid iutput Vint W , int nZ [ Yor Vint i ^ @] i S n] i``Z printY V_ cadd ^ ad fn_, i, cidZ] b xW WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW Wx Noid DeadData Vint W , int Xn, char WYna1eZ [ \IFU WY] Y ^ Yopen VYna1e,_r`_Z] iY VIYZ [ printY V_Can not read the Yi<e as_,Yna1eZ] return] b Yor Vint i ^ @ ] i S n ] i``Z YscanY VY,_ad_,X cidZ] Yc<oseVYZ] b Noid eriteData Vint W , int Xn, char WYna1eZ [ \IFU WY] Y ^ Yopen VYna1e, _>t_Z] iY VIYZ [ printY V_Can not >rite the Yi<e as fn_, Yna1eZ] return] b Yor Vint i ^ @ ] i S n ] i``Z YprintY VY, _ad _, cidZ] printY V_fn Data is >riten in Yi<e as fn_,Yna1eZ] Yc<oseVYZ] b xW WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW Wx Noid insertAYter VFinkedFist <ist, int y, int Z [ Jode W7 ^ ne> Jode] 7gT ^ ] Jode Wp ^ <ist.Eead] >hi<e VpgT I^ y XX pgTJe t I^ JFFZ p ^ pgTJe t] iY V pgTJe t ^^ JFF Z [ printY V_Insert \ai<ed. fn_Z] return] b iY V <ist.Eead ^ JFF Z [ <ist.Eead ^ <ist./ai< ^ 7] b e<se [ 7gTJe t ^ pgTJe t] pgTJe t ^ 7] "@

b iY Vp ^^ <ist./ai<Z [ pgTJe t ^ 7] <ist./ai< ^ 7] 7gTJe t ^ JFF] b b xW WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW Wx Noid Insert VFinkedFist X<istZ [ int , y] >hi<e V?Z [ printY V_#ress E to insert ne> e<e1ent into Eead oY Fist fn_Z] printY V_#ress / to insert ne> e<e1ent into /ai< oY Fist fn_Z] printY V_#ress A to insert ne> e<e1ent AYter y to Fist fn_Z] printY V_#ress @ to e it fn_Z] char t ^ getchVZ] t ^ toupperVtZ] s>itch VtZ [ case E: [ printY V_Insert ne> e<e1ent into Eead oY <ist fn_Z] printY V_Jhap y: fn_Z] scanY V_ad_, XyZ] insertEead V<ist, yZ] iutput V<istZ] :reak] b case /: [ printY V_Insert ne> e<e1ent into /ai< oY <ist fn_Z] printY V_Jhap y: fn_Z] scanY V_ad_, XyZ] insert/ai< V<ist, yZ] iutput V<istZ] :reak] b case A: [ printY V_Insert ne> e<e1ent AYter y fn_Z] printY V_Jhap , y: fn_Z] scanY V_ad ad_, X , XyZ] insertAYter V<ist, y, Z] iutput V<istZ] :reak] b case @: return] b xW Und s>itch VtZ Wx b xW Und >hi<e V?Z Wx b int 1ain VZ [ int n] printY V_Jhap Nao so phan tu: fn_Z] scanY V_ad_, XnZ] FinkedFist <ist] <ist.Eead ^ JFF] <ist./ai< ^ JFF] int W ] ^ ne> intcnd] Dando1 V , nZ] eriteData V , n, _D:ff>?.t t_Z] DeadData V , n, _D:ff>?.t t_Z] createFist V<ist, , nZ] iutput V<istZ] iutput V , nZ] Insert V<istZ] b FinkedFist 2 Rinc<ude Sstdio.hT Rinc<ude Sconio.hT Rinc<ude Sstd<i:.hT "?

Rinc<ude Sti1e.hT Rinc<ude Sctype.hT struct Jode [ int ] struct Jode WJe t] b] Jode WEead ^ JFF] Jode W/ai< ^ JFF] typedeY Jode FinkedFist] Noid insertEead VFinkedFist X<ist, int Z [ Jode Wp] p ^ ne> Jode] p gT ^ ] p gT Je t ^ JFF] iY VEead ^^ JFFZ [ Eead ^ p] /ai< ^ Eead] b e<se [ p gT Je t ^ Eead] Eead ^ p] b b Noid insert/ai< VFinkedFist X<ist, int Z [ Jode Wp] p ^ ne> Jode] p gT ^ ] p gT Je t ^ JFF] iY VEead ^^ JFFZ [ Eead ^ p] /ai< ^ Eead] b e<se [ /ai< gT Je t ^ p] /ai< ^ p] b b Noid Dando1 Vint W , int XnZ [ srand Vti1eV@Z Z] Yor Vint i ^ @] i S n] i``Z cid ^ randVZ a B@@] b Noid createFist VFinkedFist X<ist, int W , int XnZ [ Yor Vint i ^ ng?] i T^ @] iggZ insertEead V<ist, cidZ] b Noid iutput VFinkedFist <istZ [ Jode Wp ^ Eead] >hi<e Vp I^ JFFZ [ printY Vj ad fnk, p gT Z] p ^ p gT Je t] b b Noid iutput Vint W , int XnZ [ Yor Vint i ^ @] i S n] i``Z printY Vj cadd ^ ad fnk, i, cidZ] b xW WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW Wx Noid DeadData Vint W , int Xn, char WYna1eZ [ \IFU WY] Y ^ Yopen VYna1e,_r`_Z] iY VIYZ [ printY V_Can not read the Yi<e as_,Yna1eZ] return] b Yor Vint i ^ @ ] i S n ] i``Z YscanY VY,_ad_,X cidZ] Yc<oseVYZ] b Noid eriteData Vint W , int Xn, char WYna1eZ [ \IFU WY] Y ^ Yopen VYna1e, _>t_Z] iY VIYZ [ printY V_Can not >rite the Yi<e as fn_, Yna1eZ] return] b Yor Vint i ^ @ ] i S n ] i``Z YprintY VY, _ad _, cidZ] "2

printY V_fn Data is >riten in Yi<e as fn_,Yna1eZ] Yc<ose VYZ] b xW WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW Wx Noid insertAYter VFinkedFist X<ist, int y, int Z [ Jode W7 ^ ne> Jode] 7gT ^ ] Jode Wp ^ Eead] Jode Wp? ^ Eead] >hi<e VpgT I^ yZ p ^ pgTJe t] iY V p ^^ JFF Z printY VjInsert \ai<ed. fnkZ] iY VEead ^ JFF Z [ Eead ^ /ai< ^ 7] b e<se [ 7gTJe t ^ pgTJe t] pgTJe t ^ 7] b iY Vp ^^ /ai<Z [ pgTJe t ^ 7] /ai< ^ 7] 7gTJe t ^ JFF] b Eead ^ p?] b xW WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW Wx Noid Insert VFinkedFist X<istZ [ int , y] >hi<e V?Z [ printY Vj#ress E to insert ne> e<e1ent into Eead oY Fist fnkZ] printY Vj#ress / to insert ne> e<e1ent into /ai< oY Fist fnkZ] printY Vj#ress A to insert ne> e<e1ent AYter y to Fist fnkZ] printY Vj#ress @ to e it fnkZ] char t ^ getchVZ] t ^ toupperVtZ] s>itch VtZ [ case E: [ printY VjInsert ne> e<e1ent into Eead oY <ist fnkZ] printY VjJhap y: fnkZ] scanY Vjadk, XyZ] insertEead V<ist, yZ] iutput V<istZ] :reak] b case /: [ printY VjInsert ne> e<e1ent into /ai< oY <ist fnkZ] printY VjJhap y: fnkZ] scanY Vjadk, XyZ] insert/ai< V<ist, yZ] iutput V<istZ] :reak] b case A: [ printY VjInsert ne> e<e1ent AYter y fnkZ] printY VjJhap , y: fnkZ] scanY Vjad adk, X , XyZ] insertAYter V<ist, y, Z] iutput V<istZ] :reak] b case @: return] b xW Und s>itch VtZ Wx b xW Und >hi<e V?Z Wx b Noid 1ain VZ [ int n] printY V_Jhap Nao so phan tu: fn_Z] scanY V_ad_, XnZ] FinkedFist <ist] int W ] ^ ne> intcnd] Dando1 V , nZ] eriteData V , n, _D:ff>?.t t_Z] "3

DeadData V , n, _D:ff>?.t t_Z] createFist V<ist, , nZ] iutput V<istZ] iutput V , nZ] Insert V<istZ] b Noid InsertAYter VFist X<ist, int y, int Z [ Jode W7 ^ ne> Jode] 7gT ^ ] Jode Wp ^ <ist.Eead] Jode Wp? ^ <ist.Eead] >hi<e VpgT I^ yZ p ^ p gT Je t] iY Vp ^^ JFFZ printY VjInsert \ai<ed. fnkZ] iY V <ist.Eead ^ JFF Z [ <ist.Eead ^ <ist./ai< ^ 7] b e<se [ 7gTJe t ^ pgTJe t] pgTJe t ^ 7] b iY Vp ^^ <ist./ai<Z [ pgTJe t ^ 7] <ist./ai< ^ 7] 7gTJe t ^ JFF] b <ist.Eead ^ p?] b erong: Noid InsertAYter VFist X<ist, int y, int Z [ Jode W7 ^ ne> Jode] 7gT ^ ] Jode Wp ^ <ist.Eead] >hi<e VpgT I^ yZ p ^ p gT Je t] iY Vp ^^ JFFZ printY VjInsert \ai<ed. fnkZ] iY V<ist.Eead ^ JFFZ [ <ist.Eead ^ <ist./ai< ^ 7] b e<se [ 7gTJe t ^ pgTJe t] pgTJe t ^ 7] b iY Vp ^^ <ist./ai<Z [ pgTJe t ^ 7] <ist./ai< ^ 7] 7gTJe t ^ JFF] b b Cut <ist.Eead, <ist.Eead ^^ JFF. FinkedFist >ith C<ass Rinc<ude Sstdio.hT Rinc<ude Sconio.hT ""

c<ass FinkedFist [ protected: c<ass Jode [ pu:<ic: int Data] Jode WJe t] b] protected: Jode WEead] Jode W/ai<] pu:<ic: FinkedFistVZ [ Eead ^ /ai< ^ JFF] b Noid insertEead Vint Z] Noid insert/ai< Vint Z] Noid createFist Vint W , int XnZ] Noid iutputVZ] int re1oNeEeadVZ] int re1oNe/ai<VZ] Noid insertAYter Vint y, int Z] Noid InsertVZ] b] xxggggggggggggggggggggggggggggggggggggggggggggggggggggg Noid FinkedFist :: insertEead Vint Z [ Jode Wp] p ^ ne> Jode] pgTData ^ ] pgTJe t ^ JFF] iY VEead ^^ JFFZ [ Eead ^ p] /ai< ^ Eead] b e<se [ p gT Je t ^ Eead] Eead ^ p] b b Noid FinkedFist :: insert/ai< Vint Z [ Jode Wp] p ^ ne> Jode] pgTData ^ ] pgTJe t ^ JFF] iY V Eead ^^ JFFZ [ Eead ^ p] /ai< ^ Eead] b e<se [ /ai< gT Je t ^ p] /ai< ^ p] b p gT Je t ^ JFF] b Noid FinkedFist :: iutput VZ [ Jode Wp ^ Eead] >hi<e Vp I^ JFFZ [ printY V_adfn_, pgTDataZ] p ^ pgTJe t] b b Noid iutput Vint W , int XnZ [ Yor Vint i ^ @] i S n] i``Z "B

printY Vj cadd ^ ad fnk, i, cidZ] b Noid FinkedFist :: createFist Vint W , int XnZ [ int i, k] k ^ @] Yor Vi ^ ng?] i T^ @] iggZ [ insertEead V ckdZ] k``] b b xW WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW Wx Noid readData Vint W , int Xn, char WYna1eZ [ \IFU WY] Y ^ Yopen VYna1e,_r`_Z] iY VIYZ [ printY V_Can not read the Yi<e as_,Yna1eZ] return] b Yor Vint i ^ @ ] i S n ] i``Z YscanY VY,_ad_,X cidZ] Yc<oseVYZ] b Noid >riteData Vint W , int Xn, char WYna1eZ [ \IFU WY] Y ^ Yopen VYna1e, _>t_Z] iY VIYZ [ printY V_Can not >rite the Yi<e as fn_, Yna1eZ] return] b Yor Vint i ^ @ ] i S n ] i``Z YprintY VY, _ad _, cidZ] printY V_fn Data is >riten in Yi<e as fn_,Yna1eZ] Yc<ose VYZ] b xW WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW Wx Noid FinkedFist :: insertAYter Vint y, int Z [ Jode W7 ^ ne> Jode] 7gT Data ^ ] Jode Wp ^ Eead] Jode Wp? ^ Eead] >hi<e VpgT Data I^ yZ p ^ pgTJe t] iY V p ^^ JFF Z printY VjInsert \ai<ed. fnkZ] iY VEead ^^ JFF Z [ Eead ^ /ai< ^ 7] b e<se [ 7gTJe t ^ pgTJe t] pgTJe t ^ 7] b iY Vp ^^ /ai<Z [ pgTJe t ^ 7] /ai< ^ 7] 7gTJe t ^ JFF] b Eead ^ p?] b xW WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW Wx

"*

xx Euy phan tu o dau danh sach <ien ket. int FinkedFist :: re1oNeEead VZ [ Jode Wp ^ Eead] iY VEead ^^ JFF Z return g?] Eead ^ Eead gTJe t] xW Di chuyen con tro head den Ni tri phan tu dung sau p <a pgTne t. Wx iY VEead ^^ JFF Z /ai< ^ JFF] e<se pgTJe t ^ JFF] xW Cat 1oi <ien ket p Noi phan tu dung sau p. Wx de<ete p] xx oa phan tu p, p gio chi co ? 1inh ko :i rang :uoc gi het return ?] b xxggggggggggggggggggggggggggggggggggggggggggggggggggggg int FinkedFist :: re1oNe/ai<VZ [ Jode Wp ^ Eead] Jode W7 ^ JFF] >hi<e Vp I^ /ai<Z [ 7 ^ p] p ^ pgTJe t] b iY V7 I^ JFFZ [ 7gTJe t ^ JFF] /ai< ^ 7] b e<se [ Eead ^ /ai< ^ JFF] b de<ete p] return ?] b Noid FinkedFist :: Insert VZ [ int , y] printY Vj#ress ? to insert ne> e<e1ent into Eead oY Fist fnkZ] printY Vj#ress 2 to insert ne> e<e1ent into /ai< oY Fist fnkZ] printY Vj#ress 3 to insert ne> e<e1ent AYter y to Fist fnkZ] printY Vj#ress " to re1oNe the e<e1ent in Eead fnkZ] printY Vj#ress B to re1oNe the e<e1ent in /ai< fnkZ] printY Vj#ress @ to e it fnkZ] >hi<e V?Z [ char t ^ getchVZ] s>itch VtZ [ case ?: [ printY VjInsert ne> e<e1ent into Eead oY <ist fnkZ] printY VjJhap y: fnkZ] scanY Vjadk, XyZ] insertEead VyZ] iutput VZ] :reak] b case 2: [ printY VjInsert ne> e<e1ent into /ai< oY <ist fnkZ] printY VjJhap y: fnkZ] scanY Vjadk, XyZ] insert/ai< VyZ] iutput VZ] :reak] b ".

case 3: [ printY VjInsert ne> e<e1ent AYter y fnkZ] printY VjJhap , y: fnkZ] scanY Vjad adk, X , XyZ] insertAYter Vy, Z] iutput VZ] :reak] b case ": [ printY Vjre1oNe the e<e1ent in Eead fnkZ] re1oNeEead VZ] iutput VZ] :reak] b case B: [ printY Vjre1oNe the e<e1ent in /ai< fnkZ] re1oNe/ai< VZ] iutput VZ] :reak] b case @: return] b xW Und s>itch VtZ Wx b xW Und >hi<e V?Z Wx b Noid 1ain VZ [ int n] n ^ ?@] int c?@d ^ [ 2B, 2., 2=, 3B, 3=, 3?, 33, ?3, ?8, ?. b] FinkedFist <ist] <ist.createFist V , nZ] xx>riteData V , n, _D:ff>?.t t_Z] readData V , n, _D:ff>?.t t_Z] <ist.iutput VZ] <ist.Insert VZ] b Cerge Sort FinkedFist Rinc<ude Sstdio.hT Rinc<ude Sconio.hT struct Jode [ int Data] struct Jode WJe t] b ] struct FinkedFist [ Jode WEead] Jode W/ai<] b ] Noid insertEead VFinkedFist XFist, int Z [ Jode Wp] p ^ ne> Jode] p gT Data ^ ] p gT Je t ^ JFF] iY VFist.Eead ^^ JFFZ [ Fist.Eead ^ p] Fist./ai< ^ Fist.Eead] b e<se [ p gT Je t ^ Fist.Eead] Fist.Eead ^ p] b b Noid insert/ai< VFinkedFist XFist, Jode WpZ [ iY VFist. Eead ^^ JFFZ [ Fist.Eead ^ p] Fist./ai< ^ Fist.Eead] b e<se [ Fist./ai< gT Je t ^ p] Fist./ai< ^ p] b p gT Je t ^ JFF] "8

b Noid iutput VFinkedFist X FistZ [ Jode Wp ^ Fist.Eead] >hi<e Vp I^ JFFZ [ printY Vj ad fnk, p gT DataZ] p ^ p gT Je t] b b Noid iutput Vint W , int XnZ [ Yor Vint i ^ @] i S n] i``Z printY Vj cadd ^ ad fnk, i, cidZ] b Noid insertFist VFinkedFist X<ist, int W , int XnZ [ Yor Vint i ^ n g ?] i T^ @] iggZ insertEead V<ist, cidZ] b Noid initFist VFinkedFist X FistZ [ Fist.Eead ^ Fist./ai< ^ JFF] b Noid appendFist V FinkedFist X Fist, FinkedFist X Fist?Z [ iY VFist.Eead ^^ JFF Z Fist ^ Fist?] e<se [ Fist./ai< gT Je t ^ Fist?.Eead] iY VFist?.Eead I^ JFF Z Fist./ai< ^ Fist?./ai<] b b Noid 1ergeFist VFinkedFist X Fist, FinkedFist X Fist?, FinkedFist X Fist2Z [ Jode Wp] p ^ ne> Jode] >hi<e VFist?.Eead I^ JFF XX Fist2.Eead I^ JFF Z [ iY VFist?.EeadgTData S^ Fist2.EeadgTDataZ [ p ^ Fist?.Eead] Fist?.Eead ^ pgTJe t] pgTJe t ^ JFF] b e<se [ p ^ Fist2.Eead] Fist2.Eead ^ pgTJe t] pgTJe t ^ JFF] b insert/ai< VFist, pZ] b iY VFist?.Eead I^ JFF Z appendFist VFist, Fist?Z] iY VFist2.Eead I^ JFF Z appendFist VFist, Fist2Z] initFist VFist?Z] initFist VFist2Z] b Noid diNideFist VFinkedFist X Fist, FinkedFist X Fist?, FinkedFist X Fist2Z [ Jode Wp] p ^ ne> Jode] "=

>hi<e VFist.Eead I^ JFF Z [ p ^ Fist.Eead] Fist.Eead ^ pgTJe t] pgTJe t ^ JFF] insert/ai< VFist?, p Z] iY VFist.Eead I^ JFF Z [ p ^ Fist.Eead] Fist.Eead ^ pgTJe t] pgTJe t ^ JFF] insert/ai<VFist2, p Z] b b initFistVFistZ] b Noid 1ergeSort V FinkedFist XFist Z [ FinkedFist Fist?, Fist2] iY VFist.Eead ^^ Fist./ai< Z return] initFist VFist?Z] initFist VFist2Z] diNideFist VFist, Fist?, Fist2Z] 1ergeSort VFist?Z] 1ergeSort VFist2Z] 1ergeFist VFist, Fist?, Fist2Z] b Noid 1ain VZ [ int n ^ =] FinkedFist <ist] <ist.Eead ^ JFF] int cd ^ [ ===, =.3, =8., ?"B, *B., .=8, ?@?, ?@., 288 b] insertFistV<ist, , nZ] iutputV<istZ] 1ergeSortV<istZ] printY VjFist aYter sorting: fnkZ] iutputV<istZ] getchVZ] b Cerge Sort FinkedFist >ith C<ass Rinc<ude Sstdio.hT Rinc<ude Sconio.hT Rinc<ude Sstd<i:.hT Rinc<ude Sti1e.hT c<ass FinkedFist [ protected: c<ass Jode [ pu:<ic: int ] Jode WJe t] Jode VZ [ int ^ @] Je t ^ JFF] b] Jode VZ [ iY VJe t I^ JFFZ de<ete Je t] b] b] Jode WEead] Jode W/ai<] pu:<ic: FinkedFistVZ] FinkedFist VZ] B@

Noid insertEead Vint Z] Noid insert/ai< VJode WpZ] Noid iutput VZ] Noid initFist VZ] Noid appendFist V FinkedFist X Fist?Z] Noid 1ergeFist V FinkedFist X Fist?, FinkedFist X Fist2 Z] Noid diNideFist V FinkedFist X Fist?, FinkedFist X Fist2 Z] Noid 1ergeSortVZ] b] xxggggggggggggggggggggggggggggggggggggggggggggggggggggg FinkedFist :: FinkedFist VZ [ Eead ^ /ai< ^ JFF] b FinkedFist :: FinkedFist VZ [ iY VEead I^ JFFZ de<ete Eead] b Noid FinkedFist :: insertEead Vint Z [ Jode Wp] p ^ ne> Jode] p gT ^ ] p gT Je t ^ JFF] iY VEead ^^ JFFZ [ Eead ^ p] /ai< ^ Eead] b e<se [ p gT Je t ^ Eead] Eead ^ p] b b Noid FinkedFist :: insert/ai< VJode WpZ [ iY V Eead ^^ JFFZ [ Eead ^ p] /ai< ^ Eead] b e<se [ /ai< gT Je t ^ p] /ai< ^ p] b p gT Je t ^ JFF] b Noid FinkedFist :: iutput VZ [ Jode Wp ^ Eead] int i ^ @] >hi<e Vp I^ JFFZ [ printY V_ cadd ^ ad fn_, i, p gT Z] p ^ p gT Je t] i``] b b Noid FinkedFist :: initFistVZ [ Eead ^ /ai< ^ JFF] b Noid FinkedFist :: appendFist VFinkedFist X <ist?Z [ iY VEead ^^ JFF Z Eead ^ <ist?.Eead] e<se [ /ai< gT Je t ^ <ist?.Eead] iY V<ist?.Eead I^ JFF Z /ai< ^ <ist?./ai<] b b B?

Noid FinkedFist :: 1ergeFist V FinkedFist X <ist?, FinkedFist X <ist2 Z [ Jode Wp] p ^ ne> Jode] >hi<e V<ist?.Eead I^ JFF XX <ist2.Eead I^ JFF Z [ iY V<ist?.Eead gT S^ <ist2.Eead gT Z [ p ^ <ist?.Eead] <ist?.Eead ^ pgTJe t] pgTJe t ^ JFF] b e<se [ p ^ <ist2.Eead] <ist2.Eead ^ pgTJe t] pgTJe t ^ JFF] b insert/ai<VpZ] b iY V<ist?.Eead I^ JFF Z appendFist V<ist?Z] iY V<ist2.Eead I^ JFF Z appendFist V<ist2Z] <ist?.initFistVZ] <ist2.initFistVZ] b xxggggggggggggggggggggggggggggggggggggggggggggggggggggg Noid FinkedFist :: diNideFist VFinkedFist X <ist?, FinkedFist X <ist2Z [ Jode Wp] p ^ ne> Jode] >hi<e V Eead I^ JFF Z [ p ^ Eead] Eead ^ pgTJe t] pgTJe t ^ JFF] <ist?.insert/ai< Vp Z] iY VEead I^ JFF Z [ p ^ Eead] Eead ^ pgTJe t] pgTJe t ^ JFF] <ist2.insert/ai<Vp Z] b b initFist VZ] b Noid FinkedFist :: 1ergeSortVZ [ FinkedFist <ist?, <ist2] iY VEead ^^ /ai< Z return] <ist?.initFistVZ] <ist2.initFistVZ] diNideFist V<ist?, <ist2Z] <ist?.1ergeSortVZ] <ist2.1ergeSortVZ] 1ergeFist V<ist?, <ist2Z] b Noid Dando1 Vint W , int XnZ [ srand Vti1eV@Z Z] Yor Vint i ^ @] i S n] i``Z cid ^ randVZ a B@@] B2

b xxggggggggggggggggggggggggggggggggggggggggggggggggggggg Noid 1ain VZ [ int n] printY V_Jhap Nao so phan tu: fn_Z] scanY V_ad_, XnZ] FinkedFist <ist] int W ] ^ ne> intcnd] Dando1 V , nZ] >riteData V , n, _D:ff>?.t t_Z] readData V , n, _D:ff>?.t t_Z] Yor Vint i ^ n g ?] i T^ @] iggZ <ist.insertEead V cidZ] <ist.iutputVZ] <ist.1ergeSortVZ] printY V_Fist aYter sorting: fn_Z] <ist.iutputVZ] getchVZ] b AuickSort Dou:<e FinkedFist Rinc<ude Sstdio.hT Rinc<ude Sconio.hT Rinc<ude Sstd<i:.hT Rinc<ude Sti1e.hT struct FinkedFist [ int n] struct FinkedFist W#reN] struct FinkedFist WJe t] b] xW #ointers to \irst and Fast ite1s. Wx FinkedFist W Eead ^ JFF] FinkedFist W /ai< ^ JFF] Noid Dando1 Vint W , int XnZ [ Yor Vint i ^ @] i S n] i``Z cid ^ randVZa?@@@] b Noid addFist Vint X Z [ FinkedFist Wp ^ ne> FinkedFist] xx Set Integer Na<ue pgTn ^ ] xx Add to <ist. IY this is the Yirst ite1 added iY VEead ^^ JFFZ [ Eead ^ /ai< ^ p] pgTJe t ^ pgT#reN ^ JFF] b e<se [ xx Add ite1 to the end oY the <ist /ai<gTJe t ^ p] pgT#reN ^ /ai<] /ai< ^ p] pgTJe t ^ JFF] b b Noid addFist Vint W , int XnZ [ Yor Vint i ^ @] i S n] i``Z addFist V cidZ] b Noid re1oNeFist VZ [ B3

FinkedFist Wp, WpIte1 ^ Eead] xW Foop >hi<e there are ite1s. Wx >hi<e VpIte1 I^ JFFZ [ p ^ pIte1] xW Set the de<ete ite1 Wx pIte1 ^ pIte1gTJe t] xx CoNe to the ne t ite1 de<ete p] b xW Set g<o:a< pointers to JFF Wx Eead ^ /ai< ^ JFF] b Noid printFistVZ [ FinkedFist Wp ^ Eead] int i ^ @] >hi<e Vp I^ JFFZ [ printY V_ cadd ^ ad fn_, i, pgTnZ] p ^ pgTJe t] i``] b b Noid 7uickSort V FinkedFist W<eYt, FinkedFist Wright Z [ FinkedFist Wstart, Wcurrent] int n?] xW IY the <eYt and right pointers are the sa1e, then return. Wx iY V<eYt ^^ rightZ return] xW Set the Start and the Current ite1 pointers. Wx start ^ <eYt] current ^ startgTJe t] xW Foop YoreNer V>e<< unti< >e get to the rightZ. Wx >hi<e V?Z [ xW IY the start ite1 is <ess than the right. Wx iY VstartgTn S currentgTnZ [ xW S>ap the ite1s. Wx n? ^ currentgTn] currentgTn ^ startgTn] startgTn ^ n?] b xW Check iY >e haNe reached the right end. Wx iY Vcurrent ^^ rightZ :reak] xW CoNe to the ne t ite1 in the <ist. Wx current ^ currentgTJe t] b xW S>ap the \irst and Current ite1s. Wx n? ^ <eYtgTn] <eYtgTn ^ currentgTn] currentgTn ^ n?] xW SaNe this Current ite1. Wx FinkedFist Wo<dCurrent ^ current] xW Check iY >e need to sort the <eYt hand side oY the Current point. Wx current ^ currentgT#reN] iY Vcurrent I^ JFFZ [ iY V V<eYtgT#reN I^ currentZ XX VcurrentgTJe t I^ <eYtZ Z 7uickSort V<eYt, currentZ] b xW Check iY >e need to sort the right hand sie oY the Current point. Wx current ^ o<dCurrent] current ^ currentgTJe t] iY Vcurrent I^ JFFZ [ iY V VcurrentgT#reN I^ rightZ XX VrightgTJe t I^ currentZZ B"

7uickSort Vcurrent, rightZ] b b Noid 1ain VZ [ int W , n] printY VjUnter the nu1:er oY e<e1ents fnkZ] scanY Vjadk, XnZ] ^ ne> int cnd] Dando1 V , nZ] addFist V , nZ] printFist VZ] 7uickSort VEead, /ai<Z] printY V_Fist aYter sorting fn_Z] printFist VZ] re1oNeFistVZ] getchVZ] b AuickSort Dou:<e FinkedFist >ith C<ass Rinc<ude Sstdio.hT Rinc<ude Sconio.hT Rinc<ude Sstd<i:.hT Rinc<ude Sti1e.hT c<ass FinkedFist [ protected: c<ass Jode [ pu:<ic: int ] Jode WJe t] Jode W#reN] Jode VZ [ int ^ @] Je t ^ JFF] b] Jode VZ [ iY VJe t I^ JFFZ de<ete Je t] b] b] protected: Jode WEead] Jode W/ai<] pu:<ic: FinkedFistVZ] FinkedFist VZ] Noid iutput VZ] Noid initFist VZ] Noid addFist Vint X Z] Noid addFist Vint W , int XnZ ] Noid 7uickSort VJode WFeYt, Jode W DightZ] Noid 7uickSort VZ] b] xxggggggggggggggggggggggggggggggggggggggggggggggggggggg FinkedFist :: FinkedFistVZ [ Eead ^ /ai< ^ JFF] b FinkedFist :: FinkedFist VZ [ iY VEead I^ JFFZ de<ete Eead] b Noid FinkedFist :: iutput VZ [ Jode Wp ^ Eead] int i ^ @] BB

>hi<e Vp I^ JFFZ [ printY V_ cadd ^ ad fn_, i, p gT Z] p ^ p gT Je t] i``] b b Noid Dando1 Vint W , int XnZ [ srand Vti1eV@Z Z] Yor Vint i ^ @] i S n] i``Z cid ^ randVZ a B@@] b Noid FinkedFist :: addFist Vint X Z [ Jode Wp ^ ne> Jode] pgT ^ ] iY VEead ^^ JFFZ [ Eead ^ /ai< ^ p] pgTJe t ^ pgT#reN ^ JFF] b e<se [ /ai<gTJe t ^ p] pgT#reN ^ /ai<] /ai< ^ p] pgTJe t ^ JFF] b b Noid FinkedFist :: addFist Vint W , int XnZ [ Dando1 V , nZ] Yor Vint i ^ @] i S n] i``Z addFist V cidZ] b xxggggggggggggggggggggggggggggggggggggggggggggggggggggg Noid FinkedFist :: 7uickSort V Jode WFeYt, Jode WDight Z [ Jode WStart, WCurrent] int n?] iY VFeYt ^^ DightZ return] Start ^ FeYt] Current ^ StartgTJe t] >hi<e V?Z [ iY VStartgT S CurrentgT Z [ xx S>ap the ite1s n? ^ CurrentgT ] CurrentgT ^ StartgT ] StartgT ^ n?] b iY VCurrent ^^ DightZ :reak] Current ^ CurrentgTJe t] b n? ^ FeYtgT ] FeYtgT ^ CurrentgT ] CurrentgT ^ n?] Jode Wi<dCurrent ^ Current] Current ^ CurrentgT#reN] iY VCurrent I^ JFFZ [ iY V VFeYtgT#reN I^ CurrentZ XX VCurrentgTJe t I^ FeYtZ Z 7uickSort VFeYt, CurrentZ] b Current ^ i<dCurrent] Current ^ CurrentgTJe t] iY VCurrent I^ JFFZ [ B*

iY V VCurrentgT#reN I^ DightZ XX VDightgTJe t I^ CurrentZZ 7uickSort VCurrent, DightZ] b b Noid FinkedFist :: 7uickSort VZ [ 7uickSort VEead, /ai<Z] b xxggggggggggggggggggggggggggggggggggggggggggggggggggggg Noid 1ain VZ [ int n] printY V_Jhap Nao so phan tu: fn_Z] scanY V_ad_, XnZ] FinkedFist <ist] int W ] ^ ne> intcnd] <ist.addFist V , nZ] <ist.iutput VZ] <ist.7uickSort VZ] printY V_Fist aYter sorting: fn_Z] <ist.iutput VZ] getchVZ] b Dadi Sort FinkedFist Rinc<ude Sstdio.hT Rinc<ude Sstd<i:.hT Rinc<ude Sti1e.hT struct Jode [ int ] struct Jode WJe t] b] struct FinkedFist [ Jode WEead] Jode W/ai<] b] Noid insertEead VFinkedFist X<ist, int Z [ Jode Wp] p ^ ne> Jode] p gT ^ ] p gT Je t ^ JFF] iY V<ist.Eead ^^ JFFZ [ <ist.Eead ^ p] <ist./ai< ^ <ist.Eead] b e<se [ p gT Je t ^ <ist.Eead] <ist.Eead ^ p] b b Noid insert/ai< VFinkedFist X<ist, Jode WpZ [ iY V<ist. Eead ^^ JFFZ [ <ist.Eead ^ p] <ist./ai< ^ <ist.Eead] b e<se [ <ist./ai< gT Je t ^ p] B.

<ist./ai< ^ p] b p gT Je t ^ JFF] b Noid createFist VFinkedFist X<ist, int W , int nZ [ Yor Vint i ^ n g ?] i T^ @] iggZ insertEead V cidZ] b xW WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW Wx Noid iutput VFinkedFist X <istZ [ Jode Wp ^ <ist.Eead] >hi<e Vp I^ JFFZ [ printY Vj ad fnk, p gT Z] p ^ p gT Je t] b b Noid iutput Vint W , int XnZ [ Yor Vint i ^ @] i S n] i``Z printY Vj cadd ^ ad fnk, i, cidZ] b Noid Dando1 Vint W , int XnZ [ srand Vti1eV@Z Z] Yor Vint i ^ @] i S n] i``Z cid ^ randVZ a B@@] b xW WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW Wx Noid initFist VFinkedFist X <istZ [ <ist.Eead ^ <ist./ai< ^ JFF] b Noid appendFist V FinkedFist X <ist, FinkedFist X <ist?Z [ iY V<ist.Eead ^^ JFF Z <ist ^ <ist?] e<se [ <ist./ai< gT Je t ^ <ist?.Eead] iY V<ist?.Eead I^ JFF Z <ist./ai< ^ <ist?./ai<] b b xW WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW Wx xx +etDigit Vint n, int tZ: tra Ne Ni tri n cua so t] int getDigit Vint n, int tZ [ <ong te1p ^ ?] Yor Vint i ^ @] i S n] i``Z te1p ^ te1pW?@] return Vtxte1pZa?@] b int countDigit Vint nZ [ int count ^ @] B8

>hi<e Vn T @Z [ n ^ nx?@] count``] b return count] b int YindCa VFinkedFist X <istZ [ Jode Wp] p ^ ne> Jode] p ^ <ist.Eead] int 1a ^ pgT ] >hi<e Vp I^ JFFZ [ iY V1a S pgT Z 1a ^ pgT ] p ^ pgTJe t] b return 1a ] b int getCa Digit VFinkedFist X <istZ [ int 1a ^ YindCa V<istZ] return countDigit V1a Z] b Noid send/o)o VFinkedFist X <ist, int n, FinkedFist te1pcdZ [ Jode Wp] p ^ ne> Jode] p ^ <ist.Eead] >hi<e Vp I^ JFFZ [ insert/ai< V te1pcgetDigit Vn, pgT Zd, pZ] p ^ pgTJe t] b b Noid radi Sort VFinkedFist X <istZ [ FinkedFist te1pc?@d] int i] iY V<ist.Eead ^^ <ist./ai<Z return] Yor Vi ^ @] i S ?@] i``Z initFist Vte1pcidZ] int nu1 ^ getCa Digit V<istZ] Yor Vi ^ @] i S nu1] i``Z [ send/o)o V<ist, i, te1pZ] Yor Vint h ^ @] h S ?@] h``Z [ appendFist V<ist, te1pchdZ] initFist Vte1pchdZ] b b b Noid 1ain VZ [ int n] printY V_Jhap Nao so phan tu: fn_Z] scanY V_ad_, XnZ] FinkedFist <ist] <ist.Eead ^ JFF] int W ] ^ ne> intcnd] Dando1 V , nZ] createFist V<istZ] iutput V<istZ] radi Sort V<istZ] printY VjFist aYter sorting: fnkZ] iutput V<istZ] syste1 VjpausekZ] B=

b AuickSort FinkedFist Rinc<ude Sstdio.hT Rinc<ude Sconio.hT Rinc<ude Sstd<i:.hT Rinc<ude Sti1e.hT struct Jode [ pu:<ic: int Data] Jode WJe t] b] struct FinkedFist [ Jode WEead] Jode W/ai<] b] Noid insertEead VFinkedFist X<ist, int Z [ Jode Wp] p ^ ne> Jode] p gT Data ^ ] p gT Je t ^ JFF] iY V<ist.Eead ^^ JFFZ [ <ist.Eead ^ p] <ist./ai< ^ <ist.Eead] b e<se [ p gT Je t ^ <ist.Eead] <ist.Eead ^ p] b b Noid insert/ai< VFinkedFist X<ist, Jode WpZ [ iY V<ist.Eead ^^ JFFZ [ <ist.Eead ^ p] <ist./ai< ^ <ist.Eead] b e<se [ <ist./ai< gT Je t ^ p] <ist./ai< ^ p] b b Noid iutput VFinkedFist X<istZ [ Jode Wp ^ <ist.Eead] int i ^ @] printY Vjiutput fnkZ] >hi<e Vp I^ JFFZ [ printY V_ cadd ^ ad fn_,i , p gT DataZ] p ^ p gT Je t] i``] b b Noid initFist VFinkedFist X<istZ [ <ist.Eead ^ <ist./ai< ^ JFF] b xxggggggggggggggggggggggggggggggggggggggggggggggggggggg Noid 7uickSort VFinkedFist X<istZ [ iY V<ist.Eead ^^ JFFZ return] xW Dieu kien dung de 7uy Wx Jode Wp, Wy] y ^ <ist.Eead] <ist.Eead ^ <ist.Eead gT Je t] xW Dieu kien Nong <ap de <ist.Eead ^^ JFF Wx FinkedFist <ist?, <ist2] initFist V<ist?Z] initFist V<ist2Z] >hi<e V<ist.Eead I^ JFF Z [ p ^ <ist.Eead] <ist.Eead ^ <ist.Eead gT Je t] pgTJe t ^ JFF] *@

iY VpgTData S^ ygTDataZ insert/ai< V<ist?, pZ] e<se insert/ai< V<ist2, pZ] b 7uickSort V<ist?Z] 7uickSort V<ist2Z] iY V<ist?.Eead I^ JFFZ [ <ist.Eead ^ <ist?.Eead] <ist?./ai< gT Je t ^ y] b e<se <ist.Eead ^ y] ygTJe t ^ <ist2.Eead] iY V<ist2.Eead I^ JFFZ <ist./ai< ^ <ist2./ai<] e<se <ist./ai< ^ y] b Noid Dando1 Vint W , int XnZ [ srand Vti1eV@Z Z] Yor Vint i ^ @] i S n] i``Z cid ^ randVZ a B@@] b xxggggggggggggggggggggggggggggggggggggggggggggggggggggg Noid readData Vint W , int Xn, char WYna1eZ [ \IFU WY] Y ^ Yopen VYna1e,_r`_Z] iY VIYZ [ printY V_Can not read the Yi<e as_, Yna1eZ] return] b Yor Vint i ^ @ ] i S n ] i``Z YscanY VY, _ad_, X cidZ] Yc<oseVYZ] b Noid >riteData Vint W , int Xn, char WYna1eZ [ \IFU WY] Y ^ Yopen VYna1e, _>t_Z] iY VIYZ [ printY V_Can not >rite the Yi<e as fn_, Yna1eZ] return] b Yor Vint i ^ @ ] i S n ] i``Z YprintY VY, _ad _, cidZ] printY V_fn Data is >riten in Yi<e as fn_, Yna1eZ] Yc<ose VYZ] b xxggggggggggggggggggggggggggggggggggggggggggggggggggggg Noid 1ain VZ [ int n] printY V_Jhap Nao so phan tu: fn_Z] scanY V_ad_, XnZ] FinkedFist <ist] initFist V<istZ] int W ] ^ ne> intcnd] Dando1 V , nZ] >riteData V , n, _D:ff>?.t t_Z] readData V , n, _D:ff>?.t t_Z] Yor Vint i ^ n g ?] i T^ @] iggZ insertEead V<ist, cidZ] *?

iutput V<istZ] 7uickSort V<istZ] printY V_Fist aYter sorting: fn_Z] iutput V<istZ] getchVZ] b Auick Sort FinkedFist >ith C<ass Rinc<ude Sstdio.hT Rinc<ude Sstd<i:.hT Rinc<ude Sti1e.hT c<ass FinkedFist [ protected: c<ass Jode [ pu:<ic: int Data] Jode WJe t] Jode VZ [ int Data ^ @] Je t ^ JFF] b] Jode VZ [ iY VJe t I^ JFFZ de<ete Je t] b] b] Jode WEead] Jode W/ai<] pu:<ic: FinkedFistVZ] FinkedFist VZ] Noid insertEead Vint Z] Noid insert/ai< VJode WpZ] Noid createFist Vint W , int nZ] Noid iutput VZ] Noid initFist VZ] Noid concatFist VFinkedFist X <ist?, FinkedFist X<ist2, Jode W Z] Noid sp<itFist VFinkedFist X<ist?, FinkedFist X<ist2, Jode W Z] Noid 7uickSort VZ] b] xxggggggggggggggggggggggggggggggggggggggggggggggggggggg FinkedFist :: FinkedFist VZ [ Eead ^ /ai< ^ JFF] b FinkedFist :: FinkedFist VZ [ iY VEead I^ JFFZ de<ete Eead] b Noid FinkedFist :: insertEead Vint Z [ Jode Wp] p ^ ne> Jode] pgTData ^ ] p gT Je t ^ JFF] iY VEead ^^ JFFZ [ *2

Eead ^ p] /ai< ^ Eead] b e<se [ p gT Je t ^ Eead] Eead ^ p] b b Noid FinkedFist :: insert/ai< VJode WpZ [ iY V Eead ^^ JFFZ [ Eead ^ p] /ai< ^ Eead] b e<se [ /ai< gT Je t ^ p] /ai< ^ p] b p gT Je t ^ JFF] b Noid FinkedFist :: createFist Vint W , int nZ [ Yor Vint i ^ n g ?] i T^ @] iggZ insertEead V cidZ] b Noid FinkedFist :: iutput VZ [ Jode Wp ^ Eead] int i ^ @] >hi<e Vp I^ JFFZ [ printY V_ cadd ^ ad fn_,i , p gT DataZ] p ^ p gT Je t] i``] b b Noid FinkedFist :: initFistVZ [ Eead ^ /ai< ^ JFF] b xxggggggggggggggggggggggggggggggggggggggggggggggggggggg Noid FinkedFist :: 7uickSort VZ [ iY VEead ^^ JFFZ return] xW Dieu kien dung de 7uy Wx Jode Wp, Wy] y ^ Eead] Eead ^ Eead gT Je t] xW Dieu kien de Eead ^^ JFF Wx FinkedFist <ist?, <ist2] >hi<e VEead I^ JFF Z [ p ^ Eead] Eead ^ Eead gT Je t] pgTJe t ^ JFF] iY VpgTData S^ ygTDataZ <ist?.insert/ai< VpZ] e<se <ist2.insert/ai< VpZ] b xW <ist?.iutput VZ] <ist2.iutput VZ] printY V_y ^ ad fn_, y gT DataZ] Wx <ist?.7uickSort VZ] <ist2.7uickSort VZ] iY V<ist?.Eead I^ JFFZ [ Eead ^ <ist?.Eead] <ist?./ai< gT Je t ^ y] b e<se Eead ^ y] *3

ygTJe t ^ <ist2.Eead] iY V<ist2.Eead I^ JFFZ /ai< ^ <ist2./ai<] e<se /ai< ^ y] b Noid Dando1 Vint W , int XnZ [ srand Vti1eV@Z Z] Yor Vint i ^ @] i S n] i``Z cid ^ randVZ a B@@] b xxggggggggggggggggggggggggggggggggggggggggggggggggggggg Noid readData Vint W , int Xn, char WYna1eZ [ \IFU WY] Y ^ Yopen VYna1e,_r`_Z] iY VIYZ [ printY V_Can not read the Yi<e as_, Yna1eZ] return] b Yor Vint i ^ @ ] i S n ] i``Z YscanY VY, _ad_, X cidZ] Yc<oseVYZ] b Noid >riteData Vint W , int Xn, char WYna1eZ [ \IFU WY] Y ^ Yopen VYna1e, _>t_Z] iY VIYZ [ printY V_Can not >rite the Yi<e as fn_, Yna1eZ] return] b Yor Vint i ^ @ ] i S n ] i``Z YprintY VY, _ad _, cidZ] printY V_fn Data is >riten in Yi<e as fn_, Yna1eZ] Yc<ose VYZ] b xxggggggggggggggggggggggggggggggggggggggggggggggggggggg Noid 1ain VZ [ int n] printY V_Jhap Nao so phan tu: fn_Z] scanY V_ad_, XnZ] FinkedFist <ist] int W ] ^ ne> intcnd] Dando1 V , nZ] <ist.createFist V , nZ] >riteData V , n, _D:ff>?.t t_Z] readData V , n, _D:ff>?.t t_Z] <ist.iutput VZ] <ist.7uickSort VZ] printY V_Fist aYter sorting: fn_Z] <ist.iutput VZ] syste1 VjpausekZ] b

*"

EG1 tHnh ?@@@I ? Rinc<ude Sstdio.hT Rinc<ude Sconio.hT RdeYine CA "@@@ xx In ket 7ua tinh toan Noid printresu<t V\IFU WY, int scd, int n, int kZ [ int Yound ^ @, i ^ n g ?] >hi<e Vi T @Z [ iY VVscid I^ @Z XX VYound ^^ @ZZ [ Yound ^ i] :reak] b ggi] b YprintY VY, _et 7ua adI: fn_, kZ] iY VYound ^^ ng?Z YprintY VY, _Co the ket 7ua khong dung do da het :o nho.fn_Z] YprintY VY, _So chu so cua ket 7ua : ad fn_, Yound`?Z] Yor Vint h ^ i] h T^ @] gghZ YprintY VY, _ad_, schdZ] b Noid inYi<e Vint scd, int n, int kZ [ char gc?@@d, c ^ c] \IFU WY] do [ printY V_Jhap duong dan :_Z] YY<ushVstdinZ] getsVgZ] Y ^ Yopen Vg, _r_Z] iY VY I^ JFFZ [ printY V_)an 1uon ghi de <en Yi<e VCxZ fn_Z] c ^ getcharVZ] b e<se c ^ c] b >hi<e VVgc@d ^^ @Z c I^ cZ] Y ^ YopenVg, _>_Z] printresu<t VY, s, n, kZ] Yc<oseVYZ] printY V_Da uat ket 7ua ra Yi<e._Z] b xx hoi tao, gan gia tri ? cho chuoi Noid khoitao Vint scd, int nZ [ int i] Yor Vi ^ ?] i S n] ``iZ scid ^ @] sc@d ^ ?] b xx Jhan ? chuoi so Noi k Noid 1u<tip<y Vint scd, int n, int kZ [ int i, h] Yor Vi ^ @] i S n]``iZ scid ^ scidWk] Yor Vh ^ @] h S n g ?] ``hZ [ *B

sch ` ?d `^ schd x ?@] schd ^ schd a ?@] b b xx Ea1 tinh giai thua su dung ha1 1u<tip<y Noid Yactoria< Vint scd, int n, int kZ [ int i] khoitao Vs, nZ] Yor Vi ^ ?] i S^ k] i``Z 1u<tip<y Vs, n, iZ] b int 1ainVZ [ int k] int scCAd] do [ printY V_fn De ket thuc nhap g?: fn_Z] printY V_Jhap so :_Z] scanY V_ad_, XkZ] iY Vk T^ @Z [ Yactoria< Vs, CA, kZ] printresu<t Vstdout, s, CA, kZ] printY V_)an 1uon in ket 7ua ra Yi<e VCxZ: fn_Z] iY VVgetcharVZ ^^ CZ VgetcharVZ ^^ cZZ inYi<e Vs, CA, kZ] b e<se printY V_hong co giai thua._Z] getchVZ] b >hi<e Vk I^ g?Z] b EG1 tHnh ?@@@I 2 Rinc<ude Sstdio.hT Rinc<ude Sstd<i:.hT Y<oat \actoria< VY<oat X>?, Y<oat XkZ [ >? ^ ?, k ^ @] Yor Vint i ^ ?] i S ?@@@] i``Z [ >? ^ >?Wi] iY V>? T ?@@@Z [ >? ^ >?x?@@@] k ^ k ` 3] b b return k] b int 1ain VZ [ Y<oat >?, k] k ^ \actoria< V>?, kZ] printY Vj?@@@I ^ aY W ?@aY fnk, >?, kZ] syste1 VjpausekZ] b

**

EG1 tHnh ?@@@I 3 Rinc<ude Sstdio.hT Rinc<ude Sconio.hT int 1ainVZ [ int ac"@@@d] int i, h, n, nho, ta1] printY V_fn Jhap Nao so n ^ _Z] scanYV_ad_, XnZ] ac?d ^ ?] ta1 ^ n] Yor Vh ^ 2] h S^ n] h``Z achd ^ @] n ^ ta1] nho ^ @] Yor Vi ^ ?] i S^ n] i``Z Yor Vh ^ ?] h S^ n] h``Z [ ta1 ^ achd] iY VachdWi ` nho T^ ?@Z [ achd ^ VachdWi ` nhoZa?@] nho ^ Vta1Wi ` nhoZx?@] b e<se [ achd ^ achdWi ` nho] nho ^ @] b b printY V_fn +iai thua cua ad : fn fn_, nZ] Yor Vi ^ n] i T^ ?] iggZ iY Vacid I^ @Z [ ta1 ^ i] :reak] b Yor Vi ^ ta1] i T^ ?] iggZ printY V_ad_, acidZ] printY V_fn_Z] getchVZ] b Ca<c ?@@@I 3 and Jotation Rinc<ude Sstdio.hT Rinc<ude Sconio.hT int 1ainVZ [ int ac"@@@d] int i, h, n, nho, ta1] printY V_fn Jhap Nao so n ^ _Z] scanYV_ad_, XnZ] ac?d ^ ?] ta1 ^ n] Yor Vh ^ 2] h S^ n] h``Z achd ^ @] n ^ ta1] nho ^ @] Yor Vi ^ ?] i S^ n] i``Z Yor Vh ^ ?] h S^ n] h``Z [ ta1 ^ achd] printY Vjta1 ^ acadd ^ ad fnk, h, achdZ] *.

iY VachdWi ` nho T^ ?@Z [ printY VjiY VachdWi ` nho T^ ?@Z fnkZ] printY Vjh ^ ad, i ^ ad, nho ^ ad fnk, h, i, nhoZ] achd ^ VachdWi ` nhoZa?@] nho ^ Vta1Wi ` nhoZx?@] printY Vjachd ^ VachdWi ` nhoZ 1od ?@ fnkZ] printY Vjachd ^ acadd ^ ad fnk, h, achdZ] printY Vjnho ^ Vta1Wi ` nhoZx?@ fnkZ] printY Vjnho ^ VadWad ` adZx?@ fnk, ta1, i, nhoZ] b e<se [ printY VjiY VachdWi ` nho S ?@Z fnkZ] printY Vjachd ^ achdWi ` nho, nho ^ @ fnkZ] printY Vjachd ^ acaddWad ` ad ^ ad fnk, h, i, nho, achdWi ` nhoZ] achd ^ achdWi ` nho] nho ^ @] b b printY V_fn +iai thua cua ad : fn fn_, nZ] Yor Vi ^ n] i T^ ?] iggZ iY Vacid I^ @Z [ ta1 ^ i] :reak] b Yor Vi ^ ta1] i T^ ?] iggZ printY V_ad_, acidZ] printY V_fn_Z] return @] b Dadi Sort FinkedFist Rinc<ude Sstdio.hT Rinc<ude Sstd<i:.hT struct Jode [ int Data] struct Jode WJe t] b] struct FinkedFist [ Jode WEead] b] Noid createFist VFinkedFist X<ist, int Wa, int nZ [ int i] <ist.Eead ^ JFF] Jode Wp] p ^ ne> Jode] Yor Vi ^ @] i S n] ``iZ [ p ^ ne> Jode] pgTData ^ acid] pgTJe t ^ JFF] iY V<ist.Eead ^^ JFFZ <ist.Eead ^ p] e<se pgTJe t ^ <ist.Eead] <ist.Eead ^ p] b b *8

int getCa VFinkedFist <istZ [ xW \ind the 1a e<e1ent Wx Jode Wp ^ <ist.Eead] int 1a ] 1a ^ pgTData] >hi<e Vp I^ JFFZ [ iY V1a S pgTDataZ 1a ^ pgTData] p ^ pgTJe t] b return 1a ] b int countDigit Vint nZ [ xx De1 so chu so cua ? phan tu int count ^ @] >hi<e Vn T @Z [ count``] n ^ nx?@] b return count] b int getDigit Vint a, int kZ [ xW Deturn the kgth digit oY integer a Wx int Na<ue ^ ?] Yor Vint i ^ @] i S k] i``Z Na<ue ^ Na<ue W ?@] return V VaxNa<ueZa?@ Z] b int getCa Digit VFinkedFist <istZ [ int a ^ getCa V<istZ] return countDigit VaZ] b Noid radi Sort VFinkedFist X<istZ [ Jode Wp, WYrontc?@d, Wrearc?@d] int i, h, k, y, 1] 1 ^ getCa Digit V<istZ] Yor Vi ^ ?] i S^ 1] ``iZ [ Yor Vh ^ @] h S ?@] ``hZ Yrontchd ^ JFF] xW #<acing e<e1ents into 7ueues Wx p ^ <ist.Eead] >hi<e Vp I^ JFFZ [ y ^ getDigit VpgTData, ig?Z] xW y is the digit Wx iY VYrontcyd ^^ JFFZ [ Yrontcyd ^ p] rearcyd ^ p] b e<se [ rearcydgTJe t ^ p] rearcyd ^ p] b p ^ pgTJe t] b xW Und >hi<e Vp I^ JFFZ Wx <ist.Eead ^ JFF] Yor Vh ^ @] h S ?@] ``hZ iY VYrontchd I^ JFFZ [ *=

iY V<ist.Eead ^^ JFFZ <ist.Eead ^ Yrontchd] e<se rearckdgTJe t ^ Yrontchd] k ^ h] b rearckdgT Je t ^ JFF] b xW Und Yor Vi ^ ?] i S^ 1] ``iZ Wx b Noid iutput VFinkedFist <istZ [ Jode Wp ^ <ist.Eead] >hi<e Vp I^ JFFZ [ printY Vjad j, pgTDataZ] p ^ pgTJe t] b printY VjfnkZ] b Noid 1ainVZ [ FinkedFist <ist] int ac8d ^ [ ?=8., ?=., ?==, ?@?, =., ???, ?@3, 2@@@? b] createFist V<ist, a, 8Z] printY VjFist :eYore sorting fnkZ] iutput V<istZ] radi Sort V<istZ] printY VjFist aYter sorting fnkZ] iutput V<istZ] syste1 VjpausekZ] b CK phLng hGng 5Mi 1ua NO e1 phi1 Rinc<ude Siostrea1.hT Rinc<ude Sstdio.hT Rinc<ude Sdos.hT Rinc<ude S>indo>s.hT Rinc<ude Sstd<i:.hT struct tagJode [ int stt] struct tagJode WJe t] b] typedeY tagJode WJode] typedeY struct tagFist [ Jode Eead] Jode /ai<] b Aueue] int , y] int thieuNe ^ @] int phut ^ @] Noid goto y Vint ,int yZ [ EAJDFU hStdout ^ +etStdEand<eVS/Di/#/EAJDFUZ ] CiiDD position ^ [ , yb ] SetConso<eCursor#osition VhStdout, position Z ] b Jode getJode Vint Z [ Jode p] p ^ ne> tagJode] pgTstt ^ ] pgTJe t ^ JFF] .@

return p] b Noid init VAueue XAZ [ A. Eead ^ A./ai< ^ JFF] b Noid add/ai< VAueue XA, Jode pZ [ iY VA.Eead ^^ JFFZ A.Eead ^ A./ai< ^ p] e<se [ A./ai<gTJe t ^ p] A./ai< ^ p] b b Noid get\irst VAueue XAZ [ Jode 7] 7 ^ A.EeadgTJe t] A.EeadgTJe t ^ JFF] A.Eead ^ 7] b Noid Jhap Vint Xn, int X1, int XsoNeZ [ cout SS _ nhap so nguoi can 1ua Ne : _] cin TT n] cout SS _ nhap so nguoi toi da trong hang doi : _] cin TT 1] cout SS _ nhap so Ne toi da : _] cin TT soNe] b Noid Ink7 VAueue AZ [ S<eep VB@Z] syste1V_c<s_Z] ^ "] y ^ "] int t, yt] Jode p] p ^ A.Eead] goto y V2, 3Z] printY V_ggggggggggggggggggggggggggggggggggggggggggggggggggggggg_Z] goto yV2, BZ] printY V_ggggggggggggggggggggggggggggggggggggggggggggggggggggggg_Z] >hi<e V T ?Z [ t ^ ] yt ^ y] p ^ A.Eead] >hi<e VpZ [ goto y V t,ytZ] printY V_ad _, pgTsttZ] p ^ pgTJe t] t `^ "] b S<eepV3@@Z] gg] b b Noid u<y VAueue XA, int n, int 1, int soNeZ [ Jode p] p ^ A.Eead] int thoigian ^ 3] int i^?] iY Vn T soNeZ thieuNe ^ ?] >hi<e Vi S^ 1Z [ p ^ getJode ViZ] add/ai< VA,pZ] i``] b .?

>hi<e VA.Eead I^ JFF XX soNe T @Z [ phut``] iY Vphut a thoigian ^^ ?Z [ Ink7 VAZ] get\irst VAZ] ngg] soNegg] iY Vn T^ 1Z [ p ^ getJodeViZ] i``] add/ai< VA,pZ] b b b iY VthieuNe ^^ ?Z [ syste1V_c<s_Z] ^ "] y ^ "] int t, yt] Jode p] p ^ A.Eead] goto y V2,3Z] printY V_ggggggggggggggggggggggggggggggggggggggggggggggggggggggg_Z] goto y V2,BZ] printY V_ggggggggggggggggggggggggggggggggggggggggggggggggggggggg_Z] >hi<e V T ?Z [ t ^ ] yt ^ y] p ^ A.Eead] >hi<e VpZ [ S<eep VB@Z] goto y V t, ytZ] printY V_ad _,pgTsttZ] p ^ pgTJe t] t `^ "] b S<eepV?@@Z] gg] b b e<se [ syste1 V_c<s_Z] goto yV2,3Z] printY V_ggggggggggggggggggggggggggggggggggggggggggggggggggggggg_Z] goto y V2,BZ] printY V_ggggggggggggggggggggggggggggggggggggggggggggggggggggggg_Z] b b Noid 1ainVZ [ syste1V_c<s_Z] int n, 1, soNe] Aueue A] init VAZ] Jhap Vn, 1, soNeZ] u<y VA, n, 1, soNeZ] syste1 VjpausekZ] b P9i c% sQ ?@ sang c% sQ 2 d4ng Stack Change tenth radi to second radi using Stack. Rinc<ude Sstdio.hT RdeYine 1a ?@@ xx hai :o kHch thuoc toi da cua stack int stackc1a d] int top ^ g?] xx hoi tao stack rong Noid #ush Vint Xtop, int Z [ xx Day phan tu NGo stack iY Vtop ^^ 1a g?Z [ .2

puts V_Stack da day_Z] e it V?Z] b e<se [ top``] stackctopd ^ ] b b int #op Vint XtopZ [ xx Fay phan tu khoi stack int te1p] iY Vtop ^^ g?Z return top] e<se [ te1p ^ stackctopd] topgg] return te1p] b b Noid Decto)in Vint nZ [ int thuong, du] thuong ^ n] >hi<e Vthuong I^ @Z [ du ^ thuonga2] #ush Vtop, duZ] printY Vjdu ^ thuong 1od 2 ^ ad 1od 2 ^ ad fnk, thuong, duZ] printY Vjthuong ^ thuong x 2 ^ ad fnk, thuongx2Z] thuong ^ thuongx2] b printY V_So nhi phan <a:_Z] >hi<e Vtop I^ g?Z printY V_ad _, #op VtopZZ] b int 1ain VZ [ int n] printY VjJhap so can doi sang co so 2: fnkZ] scanY Vjadk, XnZ] Decto)in VnZ] printY V_fn_Z] return @] b Change tenth radi to second radi using Decursion Rinc<ude Siostrea1.hT Noid Decto)in Vint nZ [ iY Vn T @Z [ Decto)in Vnx2Z] cout SS na2 SS _ _] b b int )intoDec Vint nZ [ int s ^ @] int po>] Yor Vint i ^ @] n T @] i``Z [ po> ^ ?] Yor Vint h ^ @] h S i] ``hZ po> W^ 2] s `^ po>WVna?@Z] .3

n x^ ?@] b return s] b int 1ainVZ [ cout SS _Jhap n: fn_] int n] cin TT n] cout SS _Chuyen co so ?@ sang co so 2: fn_] Decto)inVnZ] cout SS _fn_] cout SS _Chuyen co so 2 sang co so ?@: fn_] cout SS _Jhap n: fn_] cin TT n] int 1 ^ )intoDec VnZ] cout SS _1 ^ _ SS 1 SS _fn_] return @] b Change tenth radi to second radi >ith notation Rinc<ude Sstdio.hT RdeYine coso 2 Noid 1ainVZ [ int i, k, n] int ac?@@d] i ^ @] k ^ ?] xWJhap nWx printY V_ n ^ fn_Z] scanY V_ad_,XnZ] xW/i1 k <a so dang coso gan :ang nWx >hi<e VcosoWk S^ nZ k ^ kWcoso] printY V_k ^ ad fn_, kZ] >hi<e Vk T @Z [ printY V_n ^ ad, k ^ ad, nxk ^ ad fn_, n, k, nxkZ] printY V_acadd ^ nxk ^ ad fn_, i, nxkZ] printY V_k ^ kxcoso ^ ad fn_, kxcosoZ] acid ^ nxk] i``] iY Vn T^ kZ [ printY V_iY Vn ^ ad T^ k ^ adZ n ^ n 1od k ^ ad fn_, n, k, nakZ] n ^ nak] b k ^ kxcoso] b n ^ i] printY V_fn So nhi phan <a fn_Z] Yor Vi ^ @] i S n] i``Z printY V_ad _, acidZ] printY V_fn_Z] b )inary Uuc<ide A<gorith1 Rinc<ude Sstdio.hT int SCFJ Vint , int yZ [ int k ^ ?, t] ."

>hi<e V V a2 ^^ @Z XX Vya2 ^^ @Z Z [ ^ x2] y ^ yx2] k ^ kW2] b >hi<e V T @Z [ >hi<e V a2 ^^ @Z ^ x2] >hi<e Vya2 ^^ @Z y ^ yx2] t ^ V g yZW2] iY Vt S @Z t ^ gt] iY V T^ yZ ^ t] e<se y ^ t] b k ^ kWy] return k] b int 1ainVZ [ int , y, k] printY VjJhap Nao 2 so , y fnkZ] scanY Vjadadk, X , XyZ] k ^ SCFJ V , yZ] printY Vjoc So Chung Fon Jhat cua ad Na ad <a ad fnk, , y, kZ] b )inary Uuc<ide A<gorith1 >ith Jotation Rinc<ude Sstdio.hT int SCFJ Vint , int yZ [ int k ^ ?, t] >hi<e V V a2 ^^ @Z XX Vya2 ^^ @Z Z [ printY Vj>hi<e V V 1od 2 ^^ @Z XX Vy 1od 2 ^^ @Z Z fnkZ] ^ x2] y ^ yx2] k ^ kW2] printY Vj ^ x2 ^ ad, y ^ yx2 ^ ad, k ^ kW2 ^ ad fnk, , y, kZ] b >hi<e V T @Z [ printY Vj>hi<e V ^ ad T @Z fnk, Z] >hi<e V a2 ^^ @Z [ printY Vj>hi<e V 1od 2 ^^ @Z fnkZ] printY Vj ^ x2 ^ ad fnk, x2Z] ^ x2] b >hi<e Vya2 ^^ @Z [ printY Vj>hi<e Vy 1od 2 ^^ @Z fnkZ] printY Vjy ^ yx2 ^ ad fnk, yx2Z] y ^ yx2] b t ^ V g yZW2] iY Vt S @Z t ^ gt] .B

printY Vjt ^ Vad g adZW2 ^ ad fnk, , y, tZ] iY V T^ yZ [ printY VjiY V ^ ad T^ y ^ adZ ^ t ^ ad fnk, , y, tZ] ^ t] b e<se [ printY VjiY V ^ ad S y ^ adZ y ^ t ^ ad fnk, , y, tZ] y ^ t] b b printY Vjk ^ kWy ^ adWad ^ ad fnk, k, y, kWyZ] k ^ kWy] return k] b int 1ainVZ [ int , y, k] printY VjJhap Nao 2 so , y fnkZ] scanY Vjadadk, X , XyZ] k ^ SCFJ V , yZ] printY Vjoc So Chung Fon Jhat cua ad Na ad <a ad fnk, , y, kZ] b ^ ?@@, y ^ ?@@@. >hi<e V V 1od 2 ^^ @Z XX Vy 1od 2 ^^ @Z Z [ ^ x2 ^ B@] y ^ yx2 ^ B@@] k ^ kW2 ^ 2] b >hi<e V V 1od 2 ^^ @Z XX Vy 1od 2 ^^ @Z Z [ ^ x2 ^ 2B] y ^ yx2 ^ 2B@] k ^ kW2 ^ "] b >hi<e V ^ 2B T @Z [ >hi<e Vy 1od 2 ^^ @Z y ^ yx2 ^ ?2B] t ^ 2B ( ?2BW2 ^ 2@@] iY V ^ 2B S y ^ 2@@Z y ^ t ^ 2@@] b >hi<e V ^ 2B T @Z [ >hi<e Vy 1od 2 ^^ @Z y ^ yx2 ^ ?@@] >hi<e Vy 1od 2 ^^ @Z y ^ yx2 ^ B@] >hi<e Vy 1od 2 ^^ @Z y ^ yx2 ^ 2B] t ^ 2B ( 2BW2 ^ @] iY V ^ 2B T^ y ^ 2BZ ^ t ^ @] b k ^ kWy ^ "W2B ^ ?@@] SCFJ coa ?@@ NG ?@@@ <G k ^ ?@@

.*

)u::<e Sort Dou:<e FinkedFist Rinc<ude Sstdio.hT Rinc<ude Sstd<i:.hT struct Jode [ int Data] Jode W#reN, WJe t] b] Noid Input VJode WXYirst, Jode WX<ast, int W , int nZ [ int i, k] k ^ @] Yor Vi ^ @] i S n] i``Z [ Jode Wp ^ ne> Jode] pgTData ^ ckd] printY V_ cadd ^ ad fn_, k, ckdZ] k``] xxpgTne t ^ Yirst] pgTpreN ^ JFF] iY VYirst I^ JFFZ [ pgTJe t ^ Yirst] pgT#reN ^ JFF] YirstgT#reN ^ p] Yirst ^ p] b e<se [ Yirst ^ <ast ^ p] pgTJe t ^ pgT#reN ^ JFF] b b b Noid S>ap Vint Xa, int X:Z [ int te1p] te1p ^ a] a ^ :] : ^ te1p] b Noid )u::<eSort VJodeW Yirst, JodeW <astZ [ Jode W\, WF] int i, h] iY VYirst I^ <astZ xx Ct tu 2 nvt tro <mn Yor V\ ^ Yirst] \gTJe t I^ JFF] \ ^ \gTJe tZ Yor VF ^ <ast] FgTData I^ \gTData] F ^ FgT#reNZ [ iY VFgTData S FgT#reNgTDataZ S>ap VFgTData, FgT#reNgTDataZ] b b Noid Disp<ay VJode WYirst, Jode W<astZ [ printY V_fn Danh sach: fn_Z] Jode Wp ^ Yirst] Yor V] p I^ JFF] p ^ pgTJe tZ printY V_ad _, pgTDataZ] printYV_fn_Z] b Noid De1oNe VJode WXYirstZ [ Jode Wp ^ Yirst] ..

>hi<e VYirstZ [ p ^ YirstgTJe t] YreeVYirstZ] Yirst ^ p] b b int 1ainVZ [ Jode WYirst ^ JFF, W<ast ^ JFF] int n ^ ?@] int c?@d ^ [ ?3, ?=, 2., 23, 2?, B@, "", ?B, ??, 28 b] Input VYirst, <ast, , nZ] Disp<ay VYirst, <astZ] )u::<eSort VYirst, <astZ] Disp<ay VYirst, <astZ] De1oNe VYirstZ] b Urror: Noid :u::<esort VJodeW Yirst, JodeW <astZ [ Jode W\ ^ Yirst, WF ^ <ast] int i, h] iY VYirst I^ <astZ xx Ct tu 2 nvt tro <mn Yor V] \gTJe t I^ JFF] \ ^ \gTJe tZ Yor V] FgTData I^ \gTData] F ^ FgT#reNZ [ iY VFgTData S FgT#reNgTDataZ S>ap VFgTData, FgT#reNgTDataZ] b b Urror: png <lp thz 2 ko ct gi tr, kh~i 52u. /he second <oop dont haNe initia< Na<ue. ShakeSort Dou:<e FinkedFist ShakeSort ? Noid ShakeSort Vint Wa, int XnZ [ int <eYt, right, i, h] <eYt ^ @] right ^ n g ?] >hi<e V<eYt S rightZ [ Yor Vi ^ right] i T <eYt] iggZ [ iY Vacid S acig?dZ S>ap Vacid, acig?dZ] b Yor Vh ^ <eYt] h S right] h``Z [ iY Vachd T ach`?dZ S>ap Vachd, ach`?dZ] b <eYt ^ <eYt ` ?] right ^ right g ?] b xW Und >hi<e V<eYt S rightZ Wx b Rinc<ude Sstdio.hT Rinc<ude Sstd<i:.hT .8

struct Jode [ int Data] Jode W#reN, WJe t] b] Noid Input VJode WXYirst, Jode WX<ast, int W , int nZ [ int i, k] k ^ @] Yor Vi ^ @] i S n] i``Z [ Jode Wp ^ ne> Jode] pgTData ^ ckd] printY V_ cadd ^ ad fn_, k, ckdZ] k``] xxpgTne t ^ Yirst] pgTpreN ^ JFF] iY VYirst I^ JFFZ [ pgTJe t ^ Yirst] pgT#reN ^ JFF] YirstgT#reN ^ p] Yirst ^ p] b e<se [ Yirst ^ <ast ^ p] pgTJe t ^ pgT#reN ^ JFF] b b b Noid S>ap Vint Xa, int X:Z [ int te1p] te1p ^ a] a ^ :] : ^ te1p] b int CountFist VJode WYirstZ [ int i ^ ?] Jode W\ ^ Yirst] >hi<e V\gTJe t I^ JFFZ [ i``] \ ^ \gTJe t] b return i] b Noid ShakeSort VJode WYirst, Jode W<astZ [ Jode W\, WF] int i, h] int <eYt ^ @, right ^ CountFist VYirstZ] >hi<e V<eYt S rightZ [ xx Ct tu 2 nvt tro <mn Yor V\ ^ Yirst] \gTJe t I^ <ast] \ ^ \gTJe tZ iY V\gTData T \gTJe tgTDataZ S>ap V\gTData, \gTJe tgTDataZ] Yor VF ^ <ast] FgT#reN I^ Yirst] F ^ FgT#reNZ iY VFgTData S FgT#reNgTDataZ S>ap VFgTData, FgT#reNgTDataZ] <eYt``] rightgg] b b Noid Disp<ay VJode WYirst, Jode W<astZ [ printY V_fn Danh sach: fn_Z] Jode Wp ^ Yirst] Yor V] p I^ JFF] p ^ pgTJe tZ .=

printY V_ad _, pgTDataZ] printYV_fn_Z] b Noid De1oNe VJode WXYirstZ [ Jode Wp ^ Yirst] >hi<e VYirstZ [ p ^ YirstgTJe t] YreeVYirstZ] Yirst ^ p] b b int 1ainVZ [ Jode WYirst ^ JFF, W<ast ^ JFF] int n ^ ?@, k] int cd ^ [ ?3, ?=, 2., 23, 2?, B@, "", ?B, ??, 28 b] Input VYirst, <ast, , nZ] Disp<ay VYirst, <astZ] ShakeSort VYirst, <astZ] Disp<ay VYirst, <astZ] De1oNe VYirstZ] b Dadi Sort FinkedFist >ith C<ass Rinc<ude Sstdio.hT Rinc<ude Sconio.hT Rinc<ude Sstd<i:.hT Rinc<ude Sti1e.hT c<ass FinkedFist [ protected: c<ass Jode [ pu:<ic: int Data] Jode WJe t] Jode W#reN] Jode VZ [ int Data ^ @] Je t ^ JFF] b] Jode VZ [ iY VJe t I^ JFFZ de<ete Je t] b] b] Jode WEead] Jode W/ai<] pu:<ic: FinkedFistVZ] FinkedFist VZ] Noid insertEead Vint Z] Noid insertEead VJode WpZ] Noid insert/ai< VJode WpZ] Noid createFist Vint W , int nZ] Noid iutput VZ] Noid initFist VZ] Noid appendFist V FinkedFist X <ist?Z] 8@

int YindCa VZ] int getCa Digit VZ] Noid radi Sort VZ] b] xxggggggggggggggggggggggggggggggggggggggggggggggggggggg FinkedFist :: FinkedFist VZ [ Eead ^ /ai< ^ JFF] b FinkedFist :: FinkedFist VZ [ iY VEead I^ JFFZ de<ete Eead] b Noid FinkedFist :: insertEead Vint Z [ Jode Wp] p ^ ne> Jode] pgTData ^ ] pgTJe t ^ JFF] iY VEead ^^ JFFZ [ Eead ^ p] /ai< ^ Eead] b e<se [ pgTJe t ^ Eead] Eead ^ p] b b Noid FinkedFist :: insert/ai< VJode WpZ [ iY V Eead ^^ JFFZ [ Eead ^ p] /ai< ^ Eead] b e<se [ /ai<gTJe t ^ p] /ai< ^ p] b pgTJe t ^ JFF] b Noid FinkedFist :: insertEead VJode WpZ [ iY VEead ^^ JFFZ [ Eead ^ p] /ai< ^ Eead] b e<se [ pgTJe t ^ Eead] Eead ^ p] b b Noid FinkedFist :: createFist Vint W , int nZ [ Yor Vint i ^ n g ?] i T^ @] iggZ insertEead V cidZ] b Noid FinkedFist :: iutput VZ [ Jode Wp ^ Eead] >hi<e Vp I^ JFFZ [ printY V_adfn_, pgTDataZ] p ^ pgTJe t] b b Noid FinkedFist :: initFist VZ [ 8?

Eead ^ /ai< ^ JFF] b Noid FinkedFist :: appendFist VFinkedFist X <ist?Z [ iY VEead ^^ JFF Z Eead ^ /ai< ^ <ist?.Eead] e<se [ /ai<gTJe t ^ <ist?.Eead] iY V<ist?.Eead I^ JFF Z /ai< ^ <ist?./ai<] b b xxggggggggggggggggggggggggggggggggggggggggggggggggggggg xx getDigit Vint n, int tZ: tra Ne Ni tri n cua so t] int getDigit Vint n, int tZ [ <ong te1p ^ ?] Yor Vint i ^ @] i S n] i``Z te1p ^ te1pW?@] return Vtxte1pZa?@] b int countDigit Vint nZ [ int count ^ @] >hi<e Vn T @Z [ n ^ nx?@] count``] b return count] b int FinkedFist :: YindCa VZ [ Jode Wp] p ^ ne> Jode] p ^ Eead] int 1a ^ pgTData] >hi<e Vp I^ JFFZ [ iY V1a S pgTDataZ 1a ^ pgTData] p ^ pgTJe t] b return 1a ] b int FinkedFist :: getCa Digit VZ [ int 1a ^ YindCa VZ] return countDigit V1a Z] b Noid FinkedFist :: radi Sort VZ [ FinkedFist )c?@d] int i, k] Jode Wp] iY VEead ^^ /ai<Z return] Yor Vi ^ @] i S ?@] i``Z )cid.initFistVZ] Yor Vk ^ @] k S ?@] k``Z [ >hi<e VEead I^ JFFZ [ 82

p ^ Eead] Eead ^ pgTJe t] pgTJe t ^ JFF] i ^ getDigit VpgTData, kZ] )cid.insert/ai< VpZ] b Eead ^ )c@d.Eead] Yor Vi ^ ?] i S ?@] i``Z appendFist V)cidZ] xW JQi )cid NGo cuQi <ist Wx b b Noid iutput Vint W , int XnZ [ Yor Vint i ^ @] i S n] i``Z printY V_ cadd ^ ad fn_, i, cidZ] b Noid Dando1 Vint W , int XnZ [ srand Vti1eV@Z Z] Yor Vint i ^ @] i S n] i``Z cid ^ randVZ a B@@] b xW goiog gggggggggggggggggggggggggggggggggggggggggggggggggg goiog Wx Noid 1ain VZ [ int n] printY V_Jhap Nao so phan tu: fn_Z] scanY V_ad_, XnZ] FinkedFist <ist] int W ] ^ ne> intcnd] Dando1 V , nZ] <ist.createFist V , nZ] <ist.iutput VZ] iutput V , nZ] <ist.radi Sort VZ] printY V_Fist aYter sorting: fn_Z] <ist.iutput VZ] syste1 VjpausekZ] b

83

Вам также может понравиться