Initial data commit

This commit is contained in:
Ingy döt Net 2023-07-01 11:58:00 -04:00
parent 72d218235f
commit f23f22d71c
199087 changed files with 3378941 additions and 0 deletions

View file

@ -0,0 +1,41 @@
program BeadSortTest
use iso_fortran_env
! for ERROR_UNIT; to make this a F95 code,
! remove prev. line and declare ERROR_UNIT as an
! integer parameter matching the unit associated with
! standard error
integer, dimension(7) :: a = (/ 7, 3, 5, 1, 2, 1, 20 /)
call beadsort(a)
print *, a
contains
subroutine beadsort(a)
integer, dimension(:), intent(inout) :: a
integer, dimension(maxval(a), maxval(a)) :: t
integer, dimension(maxval(a)) :: s
integer :: i, m
m = maxval(a)
if ( any(a < 0) ) then
write(ERROR_UNIT,*) "can't sort"
return
end if
t = 0
forall(i=1:size(a)) t(i, 1:a(i)) = 1 ! set up abacus
forall(i=1:m) ! let beads "fall"; instead of
s(i) = sum(t(:, i)) ! moving them one by one, we just
t(:, i) = 0 ! count how many should be at bottom,
t(1:s(i), i) = 1 ! and then "reset" and set only those
end forall
forall(i=1:size(a)) a(i) = sum(t(i,:))
end subroutine beadsort
end program BeadSortTest