Sorts real arrays key
and arr1
using insertion sort
based on order of key
.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | arr_len |
Size of arrays |
||
real, | intent(inout), | dimension(1:arr_len) | :: | key |
Arrays to be sorted |
|
real, | intent(inout), | dimension(1:arr_len) | :: | arr1 |
Arrays to be sorted |
pure subroutine r_1_insertsort(arr_len,key,arr1)
implicit none
!> Size of arrays
integer, intent(in) :: arr_len
!> Arrays to be sorted
real, intent(inout), dimension(1:arr_len) :: key, arr1
!Internals
integer :: i, j
real :: ak, a1 !Used to hold selected elements
logical :: done_exit
do j=2,arr_len
!Get current value
ak=key(j) ; a1=arr1(j)
done_exit=.false.
do i=j-1,1,-1
!Escape loop
if(key(i).le.ak)then
done_exit=.true.
exit
endif
!Shift values along one
key(i+1)=key(i) ; arr1(i+1)=arr1(i)
enddo
if(.not.done_exit) i=0
!Insert value in correct place in section
key(i+1)=ak ; arr1(i+1)=a1
enddo
end subroutine r_1_insertsort