Sorting in Co-array Fortran
Our example demonstrates sorting in Co-array Fortran. We’ll look at sorting for built-in types.
program sorting
use, intrinsic :: iso_fortran_env
implicit none
character(len=1), dimension(3) :: strs = ['c', 'a', 'b']
integer, dimension(3) :: ints = [7, 2, 4]
logical :: is_sorted
! Sort strings
call sort(strs)
print *, "Strings: ", strs
! Sort integers
call sort(ints)
print *, "Ints: ", ints
! Check if sorted
is_sorted = all(ints(1:size(ints)-1) <= ints(2:size(ints)))
print *, "Sorted: ", is_sorted
contains
subroutine sort(arr)
class(*), dimension(:), intent(inout) :: arr
integer :: i, j
class(*), allocatable :: temp
do i = 1, size(arr) - 1
do j = i + 1, size(arr)
select type (arr)
type is (character(*))
if (arr(i) > arr(j)) then
temp = arr(i)
arr(i) = arr(j)
arr(j) = temp
end if
type is (integer)
if (arr(i) > arr(j)) then
temp = arr(i)
arr(i) = arr(j)
arr(j) = temp
end if
end select
end do
end do
end subroutine sort
end program sorting
In this Co-array Fortran example, we’ve implemented a simple bubble sort algorithm to sort arrays of different types. The sort
subroutine is generic and can handle both character and integer arrays.
We first sort a character array and then an integer array. After sorting, we print the results. Finally, we check if the integer array is sorted using a simple array comparison.
To compile and run this program:
$ gfortran -coarray=single sorting.f90 -o sorting
$ ./sorting
Strings: a b c
Ints: 2 4 7
Sorted: T
Note that Co-array Fortran doesn’t have a built-in generic sorting function like Go’s slices.Sort()
. Instead, we’ve implemented a basic sorting algorithm that works for both strings and integers. For more complex sorting needs, you might want to use external libraries or implement more efficient sorting algorithms.
Also, Co-array Fortran doesn’t have a direct equivalent to Go’s slices.IsSorted()
. We’ve implemented a simple check for the integer array using array operations, but this approach may not be as efficient for large arrays.