Sorts integer array key
using insertion sort
based on order of key
.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | arr_len |
Size of arrays |
||
integer, | intent(inout), | dimension(1:arr_len) | :: | key |
Arrays to be sorted |
pure subroutine i_insertsort(arr_len,key)
implicit none
!> Size of arrays
integer, intent(in) :: arr_len
!> Arrays to be sorted
integer, intent(inout), dimension(1:arr_len) :: key
!Internals
integer :: i, j
integer :: ak !Used to hold selected elements
logical :: done_exit
do j=2,arr_len
!Get current value
ak=key(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)
enddo
if(.not.done_exit) i=0
!Insert value in correct place in section
key(i+1)=ak
enddo
end subroutine i_insertsort