/ ************************************************ ******* čĊ Ġ* ĠSorted Array . kt čĊ Ġ* ĠCreated Ġby ĠSte phen ĠHall Ġon Ġ 1 1 / 0 8 / 1 8 . čĊ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 ĠSte phen ĠHall . ĠAll Ġrights Ġreserved . čĊ Ġ* ĠSorted Array Ġimplementation Ġin ĠKotlin čĊ Ġ************************************************* ******/ čĊč Ċ /** čĊ Ġ* ĠSorted Array ĠClass čĊ Ġ* Ġ@ param Ġ< T > ĠGeneric Ġtype </ T > čĊ Ġ*/ č Ċ class ĠSorted Array < T Ġ: ĠComparable < T ? >> č Ċ /** čĊ Ġ* ĠSorted Array Ġconstructor Ġinitialized Ġto Ġa Ġspecific Ġsize čĊ Ġ* Ġ@ param Ġsize ĠSize Ġto Ġinitialize Ġthe Ġarray Ġto čĊ Ġ*/ č Ċ ( size : ĠInt ) Ġ{ čĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠPrivate ĠMembers čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġvar Ġarray : ĠArray < T ?> čĊĠĠĠ Ġvar Ġcount : ĠInt Ġ= Ġ 0 čĊĠĠĠ Ġvar Ġsize : ĠInt Ġ= Ġ 0 čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠSorted Array Ġdefault Ġconstructor čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġconstructor () Ġ: Ġthis ( 4 ) Ġ{} čĊčĊĠĠĠ Ġinit Ġ{ čĊĠĠĠĠĠĠĠ Ġcount Ġ= Ġ 0 čĊĠĠĠĠĠĠĠ Ġif Ġ( size Ġ> Ġ 0 ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . size Ġ= Ġsize čĊĠĠĠĠĠĠĠ Ġelse čĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . size Ġ= Ġ 4 čĊĠĠĠĠĠĠĠ Ġarray Ġ= ĠarrayOf Null s < Comparable < *> >( this . size ) Ġas ĠArray < T ?> čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠDouble s Ġthe Ġsize Ġof Ġthe Ġinternal Ġarray čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġprivate Ġfun Ġresize () Ġ{ čĊĠĠĠĠĠĠĠ Ġsize Ġ*= Ġ 2 čĊĠĠĠĠĠĠĠ Ġval Ġtmp Ġ= ĠarrayOf Null s < Comparable < *> >( size ) Ġas ĠArray < T ?> čĊĠĠĠĠĠĠĠ ĠSystem . arraycopy ( array !! , Ġ 0 , Ġtmp , Ġ 0 , Ġcount ) čĊĠĠĠĠĠĠĠ Ġarray Ġ= Ġtmp čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠAdds Ġnew Ġitem Ġinto Ġthe Ġarray čĊĠĠĠĠ Ġ* Ġ@ param Ġdata ĠData Ġto Ġadd Ġinto Ġthe Ġarray čĊĠĠĠĠ Ġ* Ġ@ return ĠData Ġadded Ġinto Ġthe Ġarray čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġfun Ġadd ( data : ĠT ?): ĠT ? Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( data Ġ== Ġnull ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull čĊčĊĠĠĠĠĠĠĠ Ġif Ġ( this . count Ġ== Ġsize ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġresize () čĊčĊĠĠĠĠĠĠĠ Ġarray [ count ] Ġ= Ġdata čĊĠĠĠĠĠĠĠ Ġcount ++ čĊčĊĠĠĠĠĠĠĠ Ġreturn Ġdata čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠApp ends Ġthe Ġcontents Ġof Ġan Ġarray Ġto Ġthe ĠSorted Array čĊĠĠĠĠ Ġ* Ġ@ param Ġdata : Ġarray Ġto Ġappend čĊĠĠĠĠ Ġ* Ġ@ return Ġboolean : Ġsuccess | fail čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġfun Ġappend ( data : ĠArray < T ?> ): ĠBoolean Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( data Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( a Data Ġin Ġdata ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( a Data Ġ!= Ġnull ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( a Data ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġreturn Ġfalse čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠSets Ġthe Ġdata Ġat Ġthe Ġgiven Ġindex čĊĠĠĠĠ Ġ* Ġ@ param Ġindex : Ġindex Ġto Ġset čĊĠĠĠĠ Ġ* Ġ@ param Ġdata : Ġdata Ġto Ġset Ġindex Ġto čĊĠĠĠĠ Ġ* Ġ@ return Ġboolean : Ġsuccess | fail čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġoperator Ġfun Ġset ( index : ĠInt , Ġdata : ĠT ): ĠBoolean Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ>= Ġ 0 Ġ&& Ġindex Ġ< Ġsize ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray [ index ] Ġ= Ġdata čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġreturn Ġfalse čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠGets Ġthe Ġdata Ġat Ġthe Ġarrays Ġgiven Ġindex čĊĠĠĠĠ Ġ* Ġ@ param Ġindex ĠIndex Ġto Ġget Ġdata Ġat čĊĠĠĠĠ Ġ* Ġ@ return ĠData Ġat Ġthe Ġgiven Ġindex Ġor Ġdefault Ġvalue Ġof ĠT Ġif Ġindex Ġdoes Ġnot Ġexist čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġoperator Ġfun Ġget ( index : ĠInt ): ĠT ? Ġ{ čĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( index Ġin Ġ 0 .. ( size Ġ- Ġ 1 )) Ġarray [ index ] Ġelse Ġnull čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠRemoves Ġthe Ġdata Ġat Ġarrays Ġgiven Ġindex čĊĠĠĠĠ Ġ* Ġ@ param Ġindex ĠIndex Ġto Ġremove čĊĠĠĠĠ Ġ* Ġ@ return ĠData Ġremoved Ġfrom Ġthe Ġarray Ġor Ġdefault ĠT Ġvalue Ġif Ġindex Ġdoes Ġnot Ġexist čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġfun Ġremove ( index : ĠInt ): ĠT ? Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ< Ġ 0 Ġ|| Ġindex Ġ> Ġcount ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull čĊčĊĠĠĠĠĠĠĠ Ġval Ġtmp Ġ= Ġarray [ index ] čĊĠĠĠĠĠĠĠ Ġarray [ index ] Ġ= Ġnull čĊĠĠĠĠĠĠĠ Ġcount -- čĊĠĠĠĠĠĠĠ Ġreturn Ġtmp čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠRe sets Ġthe Ġinternal Ġarray Ġto Ġdefault Ġsize Ġwith Ġno Ġdata čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġfun Ġreset () Ġ{ čĊĠĠĠĠĠĠĠ Ġcount Ġ= Ġ 0 čĊĠĠĠĠĠĠĠ Ġsize Ġ= Ġ 4 čĊĠĠĠĠĠĠĠ Ġarray Ġ= ĠarrayOf Null s < Comparable < *> >( this . size ) Ġas ĠArray < T ?> čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠClear s Ġall Ġdata Ġin Ġthe Ġarray Ġleaving Ġsize Ġint act čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġfun Ġclear () Ġ{ čĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġcount ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray [ i ] Ġ= Ġnull čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġthis . count Ġ= Ġ 0 čĊĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠGets Ġthe Ġcurrent Ġcount Ġof Ġthe Ġarray čĊĠĠĠĠ Ġ* Ġ@ return ĠNumber Ġof Ġitems Ġin Ġthe Ġarray čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġfun Ġcount (): ĠInt Ġ{ čĊĠĠĠĠĠĠĠ Ġreturn Ġcount čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠPrivate Ġhelper Ġmethod Ġfor ĠMer ger ĠSort . ĠMerge s Ġtwo Ġsub - arrays Ġof Ġarr []. čĊĠĠĠĠ Ġ* Ġ@ param Ġarr : Ġarray Ġto Ġbe Ġsorted čĊĠĠĠĠ Ġ* Ġ@ param Ġl : Ġindex Ġof Ġfirst Ġsub Ġarray čĊĠĠĠĠ Ġ* Ġ@ param Ġm : Ġmerge Ġpoint čĊĠĠĠĠ Ġ* Ġ@ param Ġr : Ġindex Ġof Ġsecond Ġsub Ġarray čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġprivate Ġfun Ġmerge ( arr : ĠArray < T ? >, Ġl : ĠInt , Ġm : ĠInt , Ġr : ĠInt ) Ġ{ čĊĠĠĠĠĠĠĠ Ġvar Ġi : ĠInt čĊĠĠĠĠĠĠĠ Ġvar Ġj : ĠInt čĊĠĠĠĠĠĠĠ Ġvar Ġk : ĠInt čĊĠĠĠĠĠĠĠ Ġval Ġn 1 Ġ= Ġm Ġ- Ġl Ġ+ Ġ 1 čĊĠĠĠĠĠĠĠ Ġval Ġn 2 Ġ= Ġr Ġ- Ġm čĊčĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġtemp Ġarrays čĊĠĠĠĠĠĠĠ Ġval ĠL Ġ= ĠarrayOf Null s < Comparable < *> >( n 1 ) Ġas ĠArray < T ?> čĊĠĠĠĠĠĠĠ Ġval ĠR Ġ= ĠarrayOf Null s < Comparable < *> >( n 2 ) Ġas ĠArray < T ?> čĊčĊĠĠĠĠĠĠĠ Ġ// ĠCopy Ġdata Ġto Ġtemp Ġarrays ĠL [] Ġand ĠR [] čĊĠĠĠĠĠĠĠ Ġi Ġ= Ġ 0 čĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġn 1 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ ĠL [ i ] Ġ= Ġarr [ l Ġ+ Ġi ] čĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġj Ġ= Ġ 0 čĊĠĠĠĠĠĠĠ Ġwhile Ġ( j Ġ< Ġn 2 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ ĠR [ j ] Ġ= Ġarr [ m Ġ+ Ġ 1 Ġ+ Ġj ] čĊĠĠĠĠĠĠĠĠĠĠĠ Ġj ++ čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġ// ĠMerge Ġthe Ġtemp Ġarrays Ġback Ġinto Ġarr [ l .. r ] čĊĠĠĠĠĠĠĠ Ġi Ġ= Ġ 0 Ġ// ĠInitial Ġindex Ġof Ġfirst Ġsub - array čĊĠĠĠĠĠĠĠ Ġj Ġ= Ġ 0 Ġ// ĠInitial Ġindex Ġof Ġsecond Ġsub - array čĊĠĠĠĠĠĠĠ Ġk Ġ= Ġl Ġ// ĠInitial Ġindex Ġof Ġmerged Ġsub - array čĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġn 1 Ġ&& Ġj Ġ< Ġn 2 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( less Than ( L [ i ], ĠR [ j ]) Ġ|| ĠequalTo ( L [ i ], ĠR [ j ])) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarr [ k ] Ġ= ĠL [ i ] čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarr [ k ] Ġ= ĠR [ j ] čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj ++ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġk ++ čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġ// ĠCopy Ġthe Ġremaining Ġelements Ġof ĠL [], Ġif Ġthere Ġare Ġany čĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġn 1 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġarr [ k ] Ġ= ĠL [ i ] čĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġk ++ čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġ// ĠCopy Ġthe Ġremaining Ġelements Ġof ĠR [], Ġif Ġthere Ġare Ġany čĊĠĠĠĠĠĠĠ Ġwhile Ġ( j Ġ< Ġn 2 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġarr [ k ] Ġ= ĠR [ j ] čĊĠĠĠĠĠĠĠĠĠĠĠ Ġj ++ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġk ++ čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠRecursive Ġhelper Ġmethod Ġfor Ġmerge Ġsort čĊĠĠĠĠ Ġ* Ġ@ param Ġarr : Ġsub Ġarray Ġto Ġbe Ġsorted čĊĠĠĠĠ Ġ* Ġ@ param Ġl : Ġleft Ġindex čĊĠĠĠĠ Ġ* Ġ@ param Ġr : Ġright Ġindex čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġprivate Ġfun Ġmerge Sort Helper ( arr : ĠArray < T ? >, Ġl : ĠInt , Ġr : ĠInt ) Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( l Ġ< Ġr ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSame Ġas Ġ( l + r )/ 2 , Ġbut Ġavoids Ġoverflow Ġfor čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlarge Ġl Ġand Ġh čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġl Ġ+ Ġ( r Ġ- Ġl ) Ġ/ Ġ 2 čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSort Ġfirst Ġand Ġsecond Ġhal ves čĊĠĠĠĠĠĠĠĠĠĠĠ Ġmerge Sort Helper ( arr , Ġl , Ġm ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġmerge Sort Helper ( arr , Ġm Ġ+ Ġ 1 , Ġr ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġmerge ( arr , Ġl , Ġm , Ġr ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠPerforms ĠMerge ĠSort Ġon Ġinternal Ġarray čĊĠĠĠĠ Ġ* Ġ@ return ĠT [] : Ġsorted Ġcopy Ġof Ġthe Ġinternal Ġarray čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġfun Ġmerge Sort (): ĠArray < T ?> Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġtmp Ġ= ĠarrayOf Null s < Comparable < *> >( count ) Ġas ĠArray < T ?> čĊĠĠĠĠĠĠĠ ĠSystem . arraycopy ( array , Ġ 0 , Ġtmp , Ġ 0 , Ġcount ) čĊĠĠĠĠĠĠĠ Ġmerge Sort Helper ( tmp , Ġ 0 , Ġcount Ġ- Ġ 1 ) čĊĠĠĠĠĠĠĠ Ġreturn Ġtmp čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠPerforms ĠB ubble Ġsort Ġon Ġinternal Ġarray čĊĠĠĠĠ Ġ* Ġ@ return ĠT [] : Ġsorted Ġcopy Ġof Ġthe Ġinternal Ġarray čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġfun Ġbubble Sort (): ĠArray < T ?> Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġtmp Ġ= ĠarrayOf Null s < Comparable < T ?> >( count ) Ġas ĠArray < T ?> čĊĠĠĠĠĠĠĠ ĠSystem . arraycopy ( array , Ġ 0 , Ġtmp , Ġ 0 , Ġcount ) čĊčĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġcount Ġ- Ġ 1 ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġcount Ġ- Ġi Ġ- Ġ 1 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( greater Than ( tmp [ j ], Ġtmp [ j Ġ+ Ġ 1 ])) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġswap Ġtemp Ġand Ġarr [ i ] čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Ġ= Ġtmp [ j ] čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtmp [ j ] Ġ= Ġtmp [ j Ġ+ Ġ 1 ] čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtmp [ j Ġ+ Ġ 1 ] Ġ= Ġtemp čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġreturn Ġtmp čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠHelper Ġmethod Ġfor ĠQuick ĠSort . ĠSw aps Ġdata Ġin Ġthe Ġpartition čĊĠĠĠĠ Ġ* Ġ@ param Ġarr : Ġarray Ġto Ġbe Ġsorted čĊĠĠĠĠ Ġ* Ġ@ param Ġlow : Ġlow Ġindex čĊĠĠĠĠ Ġ* Ġ@ param Ġhigh : Ġhigh Ġindex čĊĠĠĠĠ Ġ* Ġ@ return Ġint : Ġpivot Ġindex čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġprivate Ġfun Ġpartition ( arr : ĠArray < T ? >, Ġlow : ĠInt , Ġhigh : ĠInt ): ĠInt Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġpivot Ġ= Ġarr [ high ] čĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġlow Ġ- Ġ 1 Ġ// Ġindex Ġof Ġsmaller Ġelement čĊĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġlow Ġuntil Ġhigh ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġcurrent Ġelement Ġis Ġsmaller Ġthan Ġor čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġequal Ġto Ġpivot čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( less Than ( arr [ j ], Ġpivot ) Ġ|| ĠequalTo ( arr [ j ], Ġpivot )) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġswap Ġarr [ i ] Ġand Ġarr [ j ] čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Ġ= Ġarr [ i ] čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarr [ i ] Ġ= Ġarr [ j ] čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarr [ j ] Ġ= Ġtemp čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġ// Ġswap Ġarr [ i + 1 ] Ġand Ġarr [ high ] Ġ( or Ġpivot ) čĊĠĠĠĠĠĠĠ Ġval Ġtemp Ġ= Ġarr [ i Ġ+ Ġ 1 ] čĊĠĠĠĠĠĠĠ Ġarr [ i Ġ+ Ġ 1 ] Ġ= Ġarr [ high ] čĊĠĠĠĠĠĠĠ Ġarr [ high ] Ġ= Ġtemp čĊčĊĠĠĠĠĠĠĠ Ġreturn Ġi Ġ+ Ġ 1 čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠHelper Ġmethod Ġfor Ġrecursive ĠQuick ĠSort čĊĠĠĠĠ Ġ* Ġ@ param Ġarr : Ġarray Ġto Ġbe Ġsorted čĊĠĠĠĠ Ġ* Ġ@ param Ġlow : Ġlow Ġindex čĊĠĠĠĠ Ġ* Ġ@ param Ġhigh : Ġhigh Ġindex čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġprivate Ġfun Ġquick Sort Helper ( arr : ĠArray < T ? >, Ġlow : ĠInt , Ġhigh : ĠInt ) Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( low Ġ< Ġhigh ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpivot Ġis Ġpartition ing Ġindex , Ġarr [ pivot ] Ġis Ġnow Ġat Ġright Ġplace čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpivot Ġ= Ġpartition ( arr , Ġlow , Ġhigh ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRe cursively Ġsort Ġelements Ġbefore Ġand Ġafter Ġpivot čĊĠĠĠĠĠĠĠĠĠĠĠ Ġquick Sort Helper ( arr , Ġlow , Ġpivot Ġ- Ġ 1 ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġquick Sort Helper ( arr , Ġpivot Ġ+ Ġ 1 , Ġhigh ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠPerforms ĠQuick ĠSort Ġon Ġthe Ġinternal Ġarray čĊĠĠĠĠ Ġ* Ġ@ return ĠT [] : Ġsorted Ġcopy Ġof Ġthe Ġinternal Ġarray čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġfun Ġquick Sort (): ĠArray < T ?> Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġtmp Ġ= ĠarrayOf Null s < Comparable < T ?> >( count ) Ġas ĠArray < T ?> čĊĠĠĠĠĠĠĠ ĠSystem . arraycopy ( array , Ġ 0 , Ġtmp , Ġ 0 , Ġcount ) čĊĠĠĠĠĠĠĠ Ġquick Sort Helper ( tmp , Ġ 0 , Ġcount Ġ- Ġ 1 ) čĊčĊĠĠĠĠĠĠĠ Ġreturn Ġtmp čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠPerforms ĠInsert ion Ġsort Ġon Ġthe Ġinternal Ġarray čĊĠĠĠĠ Ġ* Ġ@ return ĠT [] : Ġsorted Ġcopy Ġof Ġthe Ġinternal Ġarray čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġfun Ġinsertion Sort (): ĠArray < T ?> Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġtmp Ġ= ĠarrayOf Null s < Comparable < T ?> >( count ) Ġas ĠArray < T ?> čĊĠĠĠĠĠĠĠ ĠSystem . arraycopy ( array , Ġ 0 , Ġtmp , Ġ 0 , Ġcount ) čĊčĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 Ġuntil Ġcount ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġtmp [ i ] čĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġj Ġ= Ġi Ġ- Ġ 1 čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMove Ġelements Ġof Ġarr [ 0 .. i - 1 ], Ġthat Ġare Ġgreater Ġthan Ġkey , Ġto Ġone Ġposition Ġahead čĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( j Ġ>= Ġ 0 Ġ&& Ġless Than ( tmp [ j ], Ġkey )) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtmp [ j Ġ+ Ġ 1 ] Ġ= Ġtmp [ j ] čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj Ġ= Ġj Ġ- Ġ 1 čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġtmp [ j Ġ+ Ġ 1 ] Ġ= Ġkey čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġreturn Ġtmp čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠPerforms ĠSelection ĠSort Ġon Ġinternal Ġarray čĊĠĠĠĠ Ġ* Ġ@ return ĠT [] : ĠSorted Ġcopy Ġof Ġthe Ġinternal Ġdata čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġfun Ġselection Sort (): ĠArray < T ?> Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġtmp Ġ= ĠarrayOf Null s < Comparable < T ?> >( count ) Ġas ĠArray < T ?> čĊĠĠĠĠĠĠĠ ĠSystem . arraycopy ( array , Ġ 0 , Ġtmp , Ġ 0 , Ġcount ) čĊĠĠĠĠĠĠĠ Ġ// ĠOne Ġby Ġone Ġmove Ġboundary Ġof Ġun sorted Ġsub - array čĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġcount Ġ- Ġ 1 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFind Ġthe Ġminimum Ġelement Ġin Ġun sorted Ġarray čĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmin Ġ= Ġi čĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġi Ġ+ Ġ 1 Ġuntil Ġcount ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( less Than ( tmp [ j ], Ġtmp [ min ])) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Ġ= Ġj čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSwap Ġthe Ġfound Ġminimum Ġelement Ġwith Ġthe Ġfirst čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġelement čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Ġ= Ġtmp [ min ] čĊĠĠĠĠĠĠĠĠĠĠĠ Ġtmp [ min ] Ġ= Ġtmp [ i ] čĊĠĠĠĠĠĠĠĠĠĠĠ Ġtmp [ i ] Ġ= Ġtemp čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġreturn Ġtmp čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠDetermines Ġif Ġa Ġis Ġless Ġthan Ġb čĊĠĠĠĠ Ġ* Ġ@ param Ġa : Ġgeneric Ġtype Ġto Ġtest čĊĠĠĠĠ Ġ* Ġ@ param Ġb : Ġgeneric Ġtype Ġto Ġtest čĊĠĠĠĠ Ġ* Ġ@ return Ġboolean : Ġtrue | false čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġprivate Ġfun Ġless Than ( a : ĠT ?, Ġb : ĠT ?): ĠBoolean Ġ{ čĊĠĠĠĠĠĠĠ Ġreturn Ġa !!. compareTo ( b ) Ġ< Ġ 0 čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠDetermines Ġif Ġa Ġis Ġequal Ġto Ġb čĊĠĠĠĠ Ġ* Ġ@ param Ġa : Ġgeneric Ġtype Ġto Ġtest čĊĠĠĠĠ Ġ* Ġ@ param Ġb : Ġgeneric Ġtype Ġto Ġtest čĊĠĠĠĠ Ġ* Ġ@ return Ġboolean : Ġtrue | false čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġprivate Ġfun ĠequalTo ( a : ĠT ?, Ġb : ĠT ?): ĠBoolean Ġ{ čĊĠĠĠĠĠĠĠ Ġreturn Ġa !!. compareTo ( b ) Ġ== Ġ 0 čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠDetermines Ġif Ġa Ġis Ġgreater Ġthan Ġb čĊĠĠĠĠ Ġ* Ġ@ param Ġa : Ġgeneric Ġtype Ġto Ġtest čĊĠĠĠĠ Ġ* Ġ@ param Ġb : Ġgeneric Ġtype Ġto Ġtest čĊĠĠĠĠ Ġ* Ġ@ return Ġboolean : Ġtrue | false čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġprivate Ġfun Ġgreater Than ( a : ĠT ?, Ġb : ĠT ?): ĠBoolean Ġ{ čĊĠĠĠĠĠĠĠ Ġreturn Ġa !!. compareTo ( b ) Ġ> Ġ 0 čĊĠĠĠ Ġ} č Ċ } čĊ