| |||||||||||||||
| |||||||||||||||
|
Sort an array of numbers using Shell's method Description Sort an array of numbers into numerical order using Shell's method.
Further explanation of this example: 'Mosel User Guide', Section 7.2.3 'repeat until'.
Source Files By clicking on a file name, a preview is opened at the bottom of this page.
shsortfct.mos
(!******************************************************
Mosel User Guide Example Problems
=================================
file shsortfct.mos
``````````````````
Combining the 'repeat-until', 'while-do', and
'forall-do' loops. Function returning an array.
(c) 2008 Fair Isaac Corporation
author: S. Heipcke, Nov. 2005, rev. Sep. 2022
*******************************************************!)
model "Shell sort (fct)"
declarations
N: integer ! Size of array ANum
R: range ! Index range of the arrays
ANum: array(R) of real ! Unsorted array of numbers
ASorted: array(R) of real ! Sorted array of numbers
end-declarations
forward function shsort(ANum: array(R) of real): array(R) of real
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
ASorted:= shsort(ANum)
writeln("Ordered array: ")
forall(i in 1..N) write(ASorted(i), " ")
writeln
!***************************************************************
function shsort(ANum: array(R) of real): array(R) of real
returned:=ANum ! Copy the array to be sorted
! (Return the sorted array)
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:=returned(i)
j:=i
while (returned(j-inc)>v) do ! Inner loop of straight insertion
returned(j):=returned(j-inc)
j -= inc
if j<=inc: break
end-do
returned(j):= v
end-do
until (inc<=1)
end-function
end-model
| |||||||||||||||
| © Copyright 2025 Fair Isaac Corporation. |