(!****************************************************** Mosel User Guide Example Problems ================================= file shsort.mos ``````````````` Combining the 'repeat-until', 'while-do', and 'forall-do' loops. (c) 2008 Fair Isaac Corporation author: S. Heipcke, 2001 *******************************************************!) model "Shell sort" declarations N: integer ! Size of array ANum ANum: array(range) of real ! Unsorted array of numbers end-declarations N:=50 forall(i in 1..N) ANum(i):=round(random*100) writeln("Given list of numbers (size: ", N, "): ") forall(i in 1..N) write(ANum(i), " ") writeln inc:=1 ! Determine the starting increment repeat inc:=3*inc+1 until (inc>N) repeat ! Loop over the partial sorts inc:=inc div 3 forall(i in inc+1..N) do ! Outer loop of straight insertion v:=ANum(i) j:=i while (ANum(j-inc)>v) do ! Inner loop of straight insertion ANum(j):=ANum(j-inc) j -= inc if j<=inc then break; end-if end-do ANum(j):= v end-do until (inc<=1) writeln("Ordered list: ") forall(i in 1..N) write(ANum(i), " ") writeln end-model