package Ġcom . cr az yle g end . data structures and algorithms Ċ Ċ import Ġcom . cr az yle g end . data structures and algorithms . sort . selection Sort Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġcr azy Ġon Ġ 9 / 7 / 2 0 Ġto Ġlong Ġlive Ġand Ġpro sper Ġ! Ċ Ġ*/ ĊĊ Ċ internal Ġfun Ġ< T > ĠList < T >. swap ( i : ĠInt , Ġj : ĠInt ): ĠList < T > Ġ{ ĊĠĠĠ Ġif Ġ( isIn Bounds ( i ) Ġ&& ĠisIn Bounds ( j )) Ġ{ ĊĠĠĠĠĠĠĠ ĠCollections . swap ( this , Ġi , Ġj ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġthis Ċ } Ċ Ċ private Ġfun Ġ< T > ĠList < T >. isIn Bounds ( index : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġindex Ġin Ġ 0 .. last Index Ċ } Ċ Ċ fun Ġ< T > ĠMutable List < T >. swap At ( first : ĠInt , Ġsecond : ĠInt ) Ġ{ ĊĠĠĠ Ġval Ġaux Ġ= Ġthis [ first ] ĊĠĠĠ Ġthis [ first ] Ġ= Ġthis [ second ] ĊĠĠĠ Ġthis [ second ] Ġ= Ġaux Ċ } Ċ Ċ /** Ċ Ġ* ĠGiven Ġa Ġlist Ġof ĠComparable Ġelements , Ġbring Ġall Ġinstances Ġof Ġa Ġgiven Ġvalue Ġin Ġthe Ġlist Ġto Ċ the Ġright Ġside Ġof Ġthe Ġarray . Ċ Ġ* Ġ@ receiver ĠMutable List < T > Ċ Ġ* Ġ@ param Ġelement ĠT Ċ Ġ*/ Ċ fun Ġ< T Ġ: ĠComparable < T >> ĠMutable List < T >. right Align ( element : ĠT ) Ġ{ ĊĠĠĠ Ġif Ġ( size Ġ< Ġ 2 ) Ġreturn ĊĠĠĠ Ġvar Ġsearch Index Ġ= Ġsize Ġ- Ġ 2 ĊĠĠĠ Ġwhile Ġ( search Index Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this [ search Index ] Ġ== Ġelement ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmove Index Ġ= Ġsearch Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( move Index Ġ< Ġsize Ġ- Ġ 1 Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ move Index Ġ+ Ġ 1 ] Ġ!= Ġelement ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswap At ( move Index , Ġmove Index Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove Index ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsearch Index -- ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġ< T Ġ: ĠComparable < T >> ĠMutable List < T >. big gest Duplicate (): ĠT ? Ġ{ ĊĠĠĠ Ġselection Sort () ĊĠĠĠ Ġfor Ġ( i Ġin Ġ( 1 Ġuntil Ġthis . size ). reversed ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this [ i ] Ġ== Ġthis [ i Ġ- Ġ 1 ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis [ i ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġnull Ċ } Ċ Ċ /** Ċ Ġ* ĠThe Ġtime Ġcomplexity Ġof Ġthis Ġsolution Ġis ĠO ( n ). Ċ Ġ* Ġ@ receiver ĠMutable List < T > Ċ Ġ*/ Ċ fun Ġ< T Ġ: ĠComparable < T >> ĠMutable List < T >. rev () Ġ{ ĊĠĠĠ Ġvar Ġleft Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġright Ġ= Ġthis . size Ġ- Ġ 1 ĊĠĠĠ Ġwhile Ġ( left Ġ< Ġright ) Ġ{ ĊĠĠĠĠĠĠĠ Ġswap At ( left , Ġright ) ĊĠĠĠĠĠĠĠ Ġleft ++ ĊĠĠĠĠĠĠĠ Ġright -- ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ fun Ġ< T > ĠArray < T >. swap At ( first : ĠInt , Ġsecond : ĠInt ) Ġ{ ĊĠĠĠ Ġval Ġaux Ġ= Ġthis [ first ] ĊĠĠĠ Ġthis [ first ] Ġ= Ġthis [ second ] ĊĠĠĠ Ġthis [ second ] Ġ= Ġaux Ċ } Ċ Ċ val Ġascending Ġ= ĠComparator Ġ{ Ġfirst : ĠInt , Ġsecond : ĠInt Ġ-> ĊĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġfirst Ġ< Ġsecond Ġ-> Ġ- 1 ĊĠĠĠĠĠĠĠ Ġfirst Ġ> Ġsecond Ġ-> Ġ 1 ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 0 ĊĠĠĠ Ġ} Ċ } Ċ Ċ val Ġdescending Ġ= ĠComparator Ġ{ Ġfirst : ĠInt , Ġsecond : ĠInt Ġ-> ĊĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġfirst Ġ< Ġsecond Ġ-> Ġ 1 ĊĠĠĠĠĠĠĠ Ġfirst Ġ> Ġsecond Ġ-> Ġ- 1 ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 0 ĊĠĠĠ Ġ} Ċ }