r_insertsort Subroutine

private pure subroutine r_insertsort(arr_len, key)

Sorts real array key using insertion sort based on the order of key.

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: arr_len

Size of arrays

real, intent(inout), dimension(1:arr_len) :: key

Arrays to be sorted


Contents

Source Code


Source Code

  pure subroutine r_insertsort(arr_len,key)
    implicit none
    !> Size of arrays
    integer, intent(in) :: arr_len

    !> Arrays to be sorted
    real, intent(inout), dimension(1:arr_len) :: key

    !Internals
    integer :: i, j
    real :: 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 r_insertsort