Working on a stock market model I'd need some alternative to the Netlogo sort algorithm:
extensions [matrix]
globals [ii jj comp mip ord ordm ordl ordr]
to setup
print (" Problem: The sort algorithms provided by Netlogo cuts out identical list elements upon sorting ")
print (" input : ord is a list to be sorted ")
print (" output: ordm is a nested list of 1. Sorted List 2. Corresponding Input" )
print(" ")
end ;setup
to go
list-in
arrange
end
to list-in ; example :
set ord [ 5 7 3 45 23 54 1 4 8 9 0 2 6 3 89 78 43 -5]
end
to arrange
let ltr length ord ; type ("ltr ") print ltr
let r1 n-values ltr [ i -> i ] type ("r1 ") print r1
set ordm matrix:make-constant 2 ltr 0; type ("ordm ") print ordm
matrix:set-row ordm 0 ord
matrix:set-row ordm 1 r1 ; print"ordm Matrix in " print matrix:pretty-print-text ordm
;set ord matrix:to-row-list ordm ; type("ord List ") print ord
set ordr ordm
set ii 0
set jj 0
set comp matrix:get ordr 0 jj
set mip min matrix:get-row ordr 0
while [jj < ltr]
[
; type("ordm in ") print ordm
; type("ordr in ") print ordr
set comp matrix:get ordr 0 jj
set mip min matrix:get-row ordr 0
; type ("comp in ") print comp
; type ("mip in ") print mip
ifelse comp = mip
[ if jj != 0 [ matrix:swap-columns ordm ii (jj + ii)]
set jj 0
if ii < ltr - 1 [set ii ii + 1]
let lr length matrix:get-row ordr 0 ; type ("lr ") print lr
ifelse ii < ltr and lr > 1 [set ordr matrix:submatrix ordm 0 ii 1 ltr ]
[let ords matrix:to-row-list ordm ; type("ords ") print ords
set jj ltr]; end if
] [ set jj jj + 1 ] ; end else
] ; end while jj
set ordl matrix:get-row ordm 0
type ("ord :in unsorted list ") print ord
type( "ordl :out sorted list ") print ordl
print " "
print "ordm Matrix out compared with corresponding input " print matrix:pretty-print-text ordm
end ; arrange