program demo_sort_special
! sort an array using insertion sort
use,intrinsic :: iso_fortran_env, only : int32, real32, real64
use M_orderpack, only : sort_special
implicit none
! an insertion sort is very efficient for very small arrays
! but generally slower than methods like quick-sort and merge-sort.
integer,parameter :: isz=2000
real(kind=real64) :: dd(isz), hi, low
! make an array of random values
call random_seed()
call random_number(dd)
dd=dd*1000000.0-500000.0
low= minval(dd)
hi = maxval(dd)
! sort the data
call sort_special(dd)
! cursory checks
if(any(dd(1:isz-1) .gt. dd(2:isz)))stop 'ERROR: array not sorted'
write(*,*)'check min:',dd(1).eq.low
write(*,*)'check max:',dd(isz).eq.hi
write(*,*)'PASSED: random array is now sorted'
end program demo_sort_special