i_1_insertsort Subroutine

private pure subroutine i_1_insertsort(arr_len, key, arr1)

Sorts integer arrays key and arr1 using insertion sort based on order of key.

Arguments

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

Size of arrays

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

Arrays to be sorted

integer, intent(inout), dimension(1:arr_len) :: arr1

Arrays to be sorted


Contents

Source Code


Source Code

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

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

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