char_sort_index_default Module Subroutine

private module subroutine char_sort_index_default(array, index, work, iwork, reverse)

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(inout) :: array(0:)
integer(kind=int_index), intent(out) :: index(0:)
character(len=len), intent(out), optional :: work(0:)
integer(kind=int_index), intent(out), optional :: iwork(0:)
logical, intent(in), optional :: reverse

Calls

proc~~char_sort_index_default~~CallsGraph proc~char_sort_index_default char_sort_index_default interface~pic_optional pic_optional proc~char_sort_index_default->interface~pic_optional none~merge_sort~5 merge_sort proc~char_sort_index_default->none~merge_sort~5 none~reverse_segment~5 reverse_segment proc~char_sort_index_default->none~reverse_segment~5 proc~optional_char optional_char interface~pic_optional->proc~optional_char proc~optional_dp optional_dp interface~pic_optional->proc~optional_dp proc~optional_int32 optional_int32 interface~pic_optional->proc~optional_int32 proc~optional_int64 optional_int64 interface~pic_optional->proc~optional_int64 proc~optional_logical optional_logical interface~pic_optional->proc~optional_logical proc~optional_sp optional_sp interface~pic_optional->proc~optional_sp none~merge_sort~5->none~reverse_segment~5 none~calc_min_run~5 calc_min_run none~merge_sort~5->none~calc_min_run~5 none~collapse~5 collapse none~merge_sort~5->none~collapse~5 none~insert_head~5 insert_head none~merge_sort~5->none~insert_head~5 none~insertion_sort~5 insertion_sort none~merge_sort~5->none~insertion_sort~5

Variables

Type Visibility Attributes Name Initial
integer(kind=int_index), private :: array_size
character(len=:), private, allocatable :: buf(:)
integer(kind=int_index), private :: i
integer(kind=int_index), private, allocatable :: ibuf(:)
integer(kind=int_index), private :: stat

Functions

pure function calc_min_run(n) result(min_run)

Returns the minimum length of a run from 32-63 so that N/MIN_RUN is less than or equal to a power of two. See https://svn.python.org/projects/python/trunk/Objects/listsort.txt

Arguments

Type IntentOptional Attributes Name
integer(kind=int_index), intent(in) :: n

Return Value integer(kind=int_index)

pure function collapse(runs) result(r)

Arguments

Type IntentOptional Attributes Name
type(run_type), intent(in), target :: runs(0:)

Return Value integer(kind=int_index)


Subroutines

pure subroutine insert_head(array, index)

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(inout) :: array(0:)
integer(kind=int_index), intent(inout) :: index(0:)

pure subroutine insertion_sort(array, index)

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(inout) :: array(0:)
integer(kind=int_index), intent(inout) :: index(0:)

pure subroutine merge(array, mid, buf, index, ibuf)

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(inout) :: array(0:)
integer(kind=int_index), intent(in) :: mid
character(len=len), intent(inout) :: buf(0:)
integer(kind=int_index), intent(inout) :: index(0:)
integer(kind=int_index), intent(inout) :: ibuf(0:)

subroutine merge_sort(array, index, buf, ibuf)

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(inout) :: array(0:)
integer(kind=int_index), intent(inout) :: index(0:)
character(len=len), intent(inout) :: buf(0:)
integer(kind=int_index), intent(inout) :: ibuf(0:)

pure subroutine reverse_segment(array, index)

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(inout) :: array(0:)
integer(kind=int_index), intent(inout) :: index(0:)

Source Code

      module subroutine char_sort_index_default(array, index, work, iwork, &
                                                reverse)
!! `char_sort_index_default( array, index[, work, iwork, reverse] )` sorts
!! an input `ARRAY` of type `character(len=*)`
!! using a hybrid sort based on the `"Rust" sort` algorithm found in `slice.rs`
!! and returns the sorted `ARRAY` and an array `INDEX` of indices in the
!! order that would sort the input `ARRAY` in the desired direction.
         implicit none
         character(len=*), intent(inout)                     :: array(0:)
         integer(int_index), intent(out)                      :: index(0:)
         character(len=len(array)), intent(out), optional             :: work(0:)
         integer(int_index), intent(out), optional            :: iwork(0:)
         logical, intent(in), optional             :: reverse
      end subroutine char_sort_index_default