package Ġmain . algorithms . sorting Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġval Ġarray Ġ= Ġread Line () !!. split (" Ġ"). map Ġ{ Ġit . toInt () Ġ}. to IntArray () Ġ// Ġ 1 ) ĠRead Ġthe Ġinput Ġand Ġsplit Ġinto Ġarray ĊĠĠĠ Ġmerge Sort ( array ) ĊĠĠĠ Ġfor ( i Ġin Ġarray ) Ġprintln ( i ) Ċ } Ċ Ċ fun Ġmerge Sort ( array Ġ: ĠInt Array , Ġhelper : IntArray Ġ= ĠInt Array ( array . size ), Ġlow : Int Ġ= Ġ 0 , Ġhigh Ġ: ĠInt Ġ= Ġarray . size - 1 ) Ġ{ ĊĠĠĠ Ġif ( low Ġ< Ġhigh ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmiddle : Int Ġ= Ġ( low + high )/ 2 Ġ// Ġ 2 ) Ġcalculating Ġthe Ġmiddle Ġelement ĊĠĠĠĠĠĠĠ Ġmerge Sort ( array , Ġhelper , Ġlow , Ġmiddle ) Ġ// Ġ 3 ) Ġto Ġsort Ġleft Ġhalf ĊĠĠĠĠĠĠĠ Ġmerge Sort ( array , Ġhelper , Ġmiddle + 1 , Ġhigh ) Ġ// Ġ 4 ) Ġto Ġsort Ġright Ġhalf ĊĠĠĠĠĠĠĠ Ġmerge ( array , Ġhelper , Ġlow , Ġmiddle , Ġhigh ) Ġ// Ġ 5 ) ĠMerge Ġthem ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġmerge Ġ( array : ĠInt Array , Ġhelper : ĠInt Array , Ġlow : ĠInt , Ġmiddle : Int , Ġhigh : ĠInt ){ Ċ // ĠĠĠ Ġa ) Ġcopying Ġboth Ġhal ves Ġinto Ġhelper Ġarray ĊĠĠĠ Ġfor ( i Ġin Ġlow .. high ) Ġhelper [ i ] Ġ= Ġarray [ i ] ĊĊĠĠĠ Ġvar Ġhelper Left Ġ= Ġlow ĊĠĠĠ Ġvar Ġhelper Right Ġ= Ġmiddle Ġ+ Ġ 1 Ġ// Ġb ) Ġhelper Ġvariables ĊĠĠĠ Ġvar Ġcurrent Ġ= Ġlow ĊĊĠĠĠ Ġ/* Iterate Ġthrough Ġhelper Ġarray . ĠCompare Ġthe Ġleft Ġand Ġright Ġhalf , Ġcopying Ġback Ġthe Ġsmaller Ġelement ĊĠĠĠ Ġ* Ġfrom Ġthe Ġtwo Ġhal ves Ġinto Ġoriginal Ġarray */ ĊĊĠĠĠ Ġwhile Ġ( helper Left Ġ<= Ġmiddle Ġ&& Ġhelper Right Ġ<= Ġhigh ) Ġ{ Ġ// Ġc ) Ġcondition Ġto Ġcheck Ġhelper Ġleft Ġand Ġhelper Ġright ĊĠĠĠĠĠĠĠ Ġif ( helper [ helper Left ] Ġ<= Ġhelper [ helper Right ]) Ġ{ Ġ// Ġd ) ĠCheck Ġif Ġvalue Ġat Ġhelper Left Ġindex Ġis Ġless Ġthan Ġthat Ġof Ġvalue Ġat Ġhelper Ġright ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray [ current ] Ġ= Ġhelper [ helper Left ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhelper Left ++ ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ġ// Ġe ) Ġright Ġelement Ġis Ġsmaller Ġthan Ġleft Ġelement ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray [ current ] Ġ= Ġhelper [ helper Right ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhelper Right ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcurrent ++ ĊĠĠĠ Ġ} Ċ Ċ // ĠĠ Ġf ) Ġcopy Ġthe Ġrest Ġof Ġleft side Ġof Ġarray Ġinto Ġtarget ĊĠĠĠ Ġval Ġremaining Ġ= Ġmiddle Ġ- Ġhelper Left ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. remaining ) Ġ{ ĊĠĠĠĠĠĠĠ Ġarray [ current Ġ+ Ġi ] Ġ= Ġhelper [ helper Left Ġ+ Ġi ] ĊĠĠĠ Ġ} Ċ Ċ }