选择 接口

公共接口 选择

(规范)


模块过程

私有子程序 select_1_iint8_int8(a, k, kth_smallest, left, right)

选择 - 在 a(:) 中选择第 k 小的元素。

部分来自 Leon Foks 的 "Coretran" 实现的 quickSelect,https://github.com/leonfoks/coretran

参数

类型 意图可选 属性 名称
整数(kind=int8), 意图(inout) :: a(:)

我们在其中寻找第 k 小的元素的数组。在输出中,它将被部分排序,使得 all(a(1:(k-1)) <= a(k)) .and. all(a(k) <= a((k+1):size(a))) 为真。

整数(kind=int8), 意图(in) :: k

我们想要第 k 小的元素。例如 k=1 导致 kth_smallest=min(a),并且 k=size(a) 导致 kth_smallest=max(a)

整数(kind=int8), 意图(out) :: kth_smallest

在输出中包含 a(:) 的第 k 小的值

整数(kind=int8), 意图(in), 可选 :: left

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

整数(kind=int8), 意图(in), 可选 :: right

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

私有子程序 select_1_iint8_int16(a, k, kth_smallest, left, right)

选择 - 在 a(:) 中选择第 k 小的元素。

部分来自 Leon Foks 的 "Coretran" 实现的 quickSelect,https://github.com/leonfoks/coretran

参数

类型 意图可选 属性 名称
整数(kind=int8), 意图(inout) :: a(:)

我们在其中寻找第 k 小的元素的数组。在输出中,它将被部分排序,使得 all(a(1:(k-1)) <= a(k)) .and. all(a(k) <= a((k+1):size(a))) 为真。

整数(kind=int16), 意图(in) :: k

我们想要第 k 小的元素。例如 k=1 导致 kth_smallest=min(a),并且 k=size(a) 导致 kth_smallest=max(a)

整数(kind=int8), 意图(out) :: kth_smallest

在输出中包含 a(:) 的第 k 小的值

整数(kind=int16), 意图(in), 可选 :: left

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

整数(kind=int16), 意图(in), 可选 :: right

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

私有子程序 select_1_iint8_int32(a, k, kth_smallest, left, right)

选择 - 在 a(:) 中选择第 k 小的元素。

部分来自 Leon Foks 的 "Coretran" 实现的 quickSelect,https://github.com/leonfoks/coretran

参数

类型 意图可选 属性 名称
整数(kind=int8), 意图(inout) :: a(:)

我们在其中寻找第 k 小的元素的数组。在输出中,它将被部分排序,使得 all(a(1:(k-1)) <= a(k)) .and. all(a(k) <= a((k+1):size(a))) 为真。

整数(kind=int32), 意图(in) :: k

我们想要第 k 小的元素。例如 k=1 导致 kth_smallest=min(a),并且 k=size(a) 导致 kth_smallest=max(a)

整数(kind=int8), 意图(out) :: kth_smallest

在输出中包含 a(:) 的第 k 小的值

整数(kind=int32), 意图(in), 可选 :: left

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

整数(kind=int32), 意图(in), 可选 :: right

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

私有子程序 select_1_iint8_int64(a, k, kth_smallest, left, right)

选择 - 在 a(:) 中选择第 k 小的元素。

部分来自 Leon Foks 的 "Coretran" 实现的 quickSelect,https://github.com/leonfoks/coretran

参数

类型 意图可选 属性 名称
整数(kind=int8), 意图(inout) :: a(:)

我们在其中寻找第 k 小的元素的数组。在输出中,它将被部分排序,使得 all(a(1:(k-1)) <= a(k)) .and. all(a(k) <= a((k+1):size(a))) 为真。

整数(kind=int64), 意图(in) :: k

我们想要第 k 小的元素。例如 k=1 导致 kth_smallest=min(a),并且 k=size(a) 导致 kth_smallest=max(a)

整数(kind=int8), 意图(out) :: kth_smallest

在输出中包含 a(:) 的第 k 小的值

整数(kind=int64), 意图(in), 可选 :: left

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

整数(kind=int64), 意图(in), 可选 :: right

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

私有子程序 select_1_iint16_int8(a, k, kth_smallest, left, right)

选择 - 在 a(:) 中选择第 k 小的元素。

部分来自 Leon Foks 的 "Coretran" 实现的 quickSelect,https://github.com/leonfoks/coretran

参数

类型 意图可选 属性 名称
整数(kind=int16), 意图(inout) :: a(:)

我们在其中寻找第 k 小的元素的数组。在输出中,它将被部分排序,使得 all(a(1:(k-1)) <= a(k)) .and. all(a(k) <= a((k+1):size(a))) 为真。

整数(kind=int8), 意图(in) :: k

我们想要第 k 小的元素。例如 k=1 导致 kth_smallest=min(a),并且 k=size(a) 导致 kth_smallest=max(a)

整数(kind=int16), 意图(out) :: kth_smallest

在输出中包含 a(:) 的第 k 小的值

整数(kind=int8), 意图(in), 可选 :: left

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

整数(kind=int8), 意图(in), 可选 :: right

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

私有子程序 select_1_iint16_int16(a, k, kth_smallest, left, right)

选择 - 在 a(:) 中选择第 k 小的元素。

部分来自 Leon Foks 的 "Coretran" 实现的 quickSelect,https://github.com/leonfoks/coretran

参数

类型 意图可选 属性 名称
整数(kind=int16), 意图(inout) :: a(:)

我们在其中寻找第 k 小的元素的数组。在输出中,它将被部分排序,使得 all(a(1:(k-1)) <= a(k)) .and. all(a(k) <= a((k+1):size(a))) 为真。

整数(kind=int16), 意图(in) :: k

我们想要第 k 小的元素。例如 k=1 导致 kth_smallest=min(a),并且 k=size(a) 导致 kth_smallest=max(a)

整数(kind=int16), 意图(out) :: kth_smallest

在输出中包含 a(:) 的第 k 小的值

整数(kind=int16), 意图(in), 可选 :: left

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

整数(kind=int16), 意图(in), 可选 :: right

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

私有子程序 select_1_iint16_int32(a, k, kth_smallest, left, right)

选择 - 在 a(:) 中选择第 k 小的元素。

部分来自 Leon Foks 的 "Coretran" 实现的 quickSelect,https://github.com/leonfoks/coretran

参数

类型 意图可选 属性 名称
整数(kind=int16), 意图(inout) :: a(:)

我们在其中寻找第 k 小的元素的数组。在输出中,它将被部分排序,使得 all(a(1:(k-1)) <= a(k)) .and. all(a(k) <= a((k+1):size(a))) 为真。

整数(kind=int32), 意图(in) :: k

我们想要第 k 小的元素。例如 k=1 导致 kth_smallest=min(a),并且 k=size(a) 导致 kth_smallest=max(a)

整数(kind=int16), 意图(out) :: kth_smallest

在输出中包含 a(:) 的第 k 小的值

整数(kind=int32), 意图(in), 可选 :: left

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

整数(kind=int32), 意图(in), 可选 :: right

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

私有子程序 select_1_iint16_int64(a, k, kth_smallest, left, right)

选择 - 在 a(:) 中选择第 k 小的元素。

部分来自 Leon Foks 的 "Coretran" 实现的 quickSelect,https://github.com/leonfoks/coretran

参数

类型 意图可选 属性 名称
整数(kind=int16), 意图(inout) :: a(:)

我们在其中寻找第 k 小的元素的数组。在输出中,它将被部分排序,使得 all(a(1:(k-1)) <= a(k)) .and. all(a(k) <= a((k+1):size(a))) 为真。

整数(kind=int64), 意图(in) :: k

我们想要第 k 小的元素。例如 k=1 导致 kth_smallest=min(a),并且 k=size(a) 导致 kth_smallest=max(a)

整数(kind=int16), 意图(out) :: kth_smallest

在输出中包含 a(:) 的第 k 小的值

整数(kind=int64), 意图(in), 可选 :: left

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

整数(kind=int64), 意图(in), 可选 :: right

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

私有子程序 select_1_iint32_int8(a, k, kth_smallest, left, right)

选择 - 在 a(:) 中选择第 k 小的元素。

部分来自 Leon Foks 的 "Coretran" 实现的 quickSelect,https://github.com/leonfoks/coretran

参数

类型 意图可选 属性 名称
整数(kind=int32), 意图(inout) :: a(:)

我们在其中寻找第 k 小的元素的数组。在输出中,它将被部分排序,使得 all(a(1:(k-1)) <= a(k)) .and. all(a(k) <= a((k+1):size(a))) 为真。

整数(kind=int8), 意图(in) :: k

我们想要第 k 小的元素。例如 k=1 导致 kth_smallest=min(a),并且 k=size(a) 导致 kth_smallest=max(a)

整数(kind=int32), 意图(out) :: kth_smallest

在输出中包含 a(:) 的第 k 小的值

整数(kind=int8), 意图(in), 可选 :: left

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

整数(kind=int8), 意图(in), 可选 :: right

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

私有子程序 select_1_iint32_int16(a, k, kth_smallest, left, right)

选择 - 在 a(:) 中选择第 k 小的元素。

部分来自 Leon Foks 的 "Coretran" 实现的 quickSelect,https://github.com/leonfoks/coretran

参数

类型 意图可选 属性 名称
整数(kind=int32), 意图(inout) :: a(:)

我们在其中寻找第 k 小的元素的数组。在输出中,它将被部分排序,使得 all(a(1:(k-1)) <= a(k)) .and. all(a(k) <= a((k+1):size(a))) 为真。

整数(kind=int16), 意图(in) :: k

我们想要第 k 小的元素。例如 k=1 导致 kth_smallest=min(a),并且 k=size(a) 导致 kth_smallest=max(a)

整数(kind=int32), 意图(out) :: kth_smallest

在输出中包含 a(:) 的第 k 小的值

整数(kind=int16), 意图(in), 可选 :: left

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

整数(kind=int16), 意图(in), 可选 :: right

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

私有子程序 select_1_iint32_int32(a, k, kth_smallest, left, right)

选择 - 在 a(:) 中选择第 k 小的元素。

部分来自 Leon Foks 的 "Coretran" 实现的 quickSelect,https://github.com/leonfoks/coretran

参数

类型 意图可选 属性 名称
整数(kind=int32), 意图(inout) :: a(:)

我们在其中寻找第 k 小的元素的数组。在输出中,它将被部分排序,使得 all(a(1:(k-1)) <= a(k)) .and. all(a(k) <= a((k+1):size(a))) 为真。

整数(kind=int32), 意图(in) :: k

我们想要第 k 小的元素。例如 k=1 导致 kth_smallest=min(a),并且 k=size(a) 导致 kth_smallest=max(a)

整数(kind=int32), 意图(out) :: kth_smallest

在输出中包含 a(:) 的第 k 小的值

整数(kind=int32), 意图(in), 可选 :: left

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

整数(kind=int32), 意图(in), 可选 :: right

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

私有子程序 select_1_iint32_int64(a, k, kth_smallest, left, right)

选择 - 在 a(:) 中选择第 k 小的元素。

部分来自 Leon Foks 的 "Coretran" 实现的 quickSelect,https://github.com/leonfoks/coretran

参数

类型 意图可选 属性 名称
整数(kind=int32), 意图(inout) :: a(:)

我们在其中寻找第 k 小的元素的数组。在输出中,它将被部分排序,使得 all(a(1:(k-1)) <= a(k)) .and. all(a(k) <= a((k+1):size(a))) 为真。

整数(kind=int64), 意图(in) :: k

我们想要第 k 小的元素。例如 k=1 导致 kth_smallest=min(a),并且 k=size(a) 导致 kth_smallest=max(a)

整数(kind=int32), 意图(out) :: kth_smallest

在输出中包含 a(:) 的第 k 小的值

整数(kind=int64), 意图(in), 可选 :: left

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

整数(kind=int64), 意图(in), 可选 :: right

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

私有子程序 select_1_iint64_int8(a, k, kth_smallest, left, right)

选择 - 在 a(:) 中选择第 k 小的元素。

部分来自 Leon Foks 的 "Coretran" 实现的 quickSelect,https://github.com/leonfoks/coretran

参数

类型 意图可选 属性 名称
整数(kind=int64), 意图(inout) :: a(:)

我们在其中寻找第 k 小的元素的数组。在输出中,它将被部分排序,使得 all(a(1:(k-1)) <= a(k)) .and. all(a(k) <= a((k+1):size(a))) 为真。

整数(kind=int8), 意图(in) :: k

我们想要第 k 小的元素。例如 k=1 导致 kth_smallest=min(a),并且 k=size(a) 导致 kth_smallest=max(a)

整数(kind=int64), 意图(out) :: kth_smallest

在输出中包含 a(:) 的第 k 小的值

整数(kind=int8), 意图(in), 可选 :: left

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

整数(kind=int8), 意图(in), 可选 :: right

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

私有子程序 select_1_iint64_int16(a, k, kth_smallest, left, right)

选择 - 在 a(:) 中选择第 k 小的元素。

部分来自 Leon Foks 的 "Coretran" 实现的 quickSelect,https://github.com/leonfoks/coretran

参数

类型 意图可选 属性 名称
整数(kind=int64), 意图(inout) :: a(:)

我们在其中寻找第 k 小的元素的数组。在输出中,它将被部分排序,使得 all(a(1:(k-1)) <= a(k)) .and. all(a(k) <= a((k+1):size(a))) 为真。

整数(kind=int16), 意图(in) :: k

我们想要第 k 小的元素。例如 k=1 导致 kth_smallest=min(a),并且 k=size(a) 导致 kth_smallest=max(a)

整数(kind=int64), 意图(out) :: kth_smallest

在输出中包含 a(:) 的第 k 小的值

整数(kind=int16), 意图(in), 可选 :: left

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

整数(kind=int16), 意图(in), 可选 :: right

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

私有子程序 select_1_iint64_int32(a, k, kth_smallest, left, right)

选择 - 在 a(:) 中选择第 k 小的元素。

部分来自 Leon Foks 的 "Coretran" 实现的 quickSelect,https://github.com/leonfoks/coretran

参数

类型 意图可选 属性 名称
整数(kind=int64), 意图(inout) :: a(:)

我们在其中寻找第 k 小的元素的数组。在输出中,它将被部分排序,使得 all(a(1:(k-1)) <= a(k)) .and. all(a(k) <= a((k+1):size(a))) 为真。

整数(kind=int32), 意图(in) :: k

我们想要第 k 小的元素。例如 k=1 导致 kth_smallest=min(a),并且 k=size(a) 导致 kth_smallest=max(a)

整数(kind=int64), 意图(out) :: kth_smallest

在输出中包含 a(:) 的第 k 小的值

整数(kind=int32), 意图(in), 可选 :: left

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

整数(kind=int32), 意图(in), 可选 :: right

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

私有子程序 select_1_iint64_int64(a, k, kth_smallest, left, right)

选择 - 在 a(:) 中选择第 k 小的元素。

部分来自 Leon Foks 的 "Coretran" 实现的 quickSelect,https://github.com/leonfoks/coretran

参数

类型 意图可选 属性 名称
整数(kind=int64), 意图(inout) :: a(:)

我们在其中寻找第 k 小的元素的数组。在输出中,它将被部分排序,使得 all(a(1:(k-1)) <= a(k)) .and. all(a(k) <= a((k+1):size(a))) 为真。

整数(kind=int64), 意图(in) :: k

我们想要第 k 小的元素。例如 k=1 导致 kth_smallest=min(a),并且 k=size(a) 导致 kth_smallest=max(a)

整数(kind=int64), 意图(out) :: kth_smallest

在输出中包含 a(:) 的第 k 小的值

整数(kind=int64), 意图(in), 可选 :: left

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

整数(kind=int64), 意图(in), 可选 :: right

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

私有子程序 select_1_rsp_int8(a, k, kth_smallest, left, right)

选择 - 在 a(:) 中选择第 k 小的元素。

部分来自 Leon Foks 的 "Coretran" 实现的 quickSelect,https://github.com/leonfoks/coretran

参数

类型 意图可选 属性 名称
实数(kind=sp), 意图(inout) :: a(:)

我们在其中寻找第 k 小的元素的数组。在输出中,它将被部分排序,使得 all(a(1:(k-1)) <= a(k)) .and. all(a(k) <= a((k+1):size(a))) 为真。

整数(kind=int8), 意图(in) :: k

我们想要第 k 小的元素。例如 k=1 导致 kth_smallest=min(a),并且 k=size(a) 导致 kth_smallest=max(a)

实数(kind=sp), 意图(out) :: kth_smallest

在输出中包含 a(:) 的第 k 小的值

整数(kind=int8), 意图(in), 可选 :: left

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

整数(kind=int8), 意图(in), 可选 :: right

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

私有子程序 select_1_rsp_int16(a, k, kth_smallest, left, right)

选择 - 在 a(:) 中选择第 k 小的元素。

部分来自 Leon Foks 的 "Coretran" 实现的 quickSelect,https://github.com/leonfoks/coretran

参数

类型 意图可选 属性 名称
实数(kind=sp), 意图(inout) :: a(:)

我们在其中寻找第 k 小的元素的数组。在输出中,它将被部分排序,使得 all(a(1:(k-1)) <= a(k)) .and. all(a(k) <= a((k+1):size(a))) 为真。

整数(kind=int16), 意图(in) :: k

我们想要第 k 小的元素。例如 k=1 导致 kth_smallest=min(a),并且 k=size(a) 导致 kth_smallest=max(a)

实数(kind=sp), 意图(out) :: kth_smallest

在输出中包含 a(:) 的第 k 小的值

整数(kind=int16), 意图(in), 可选 :: left

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

整数(kind=int16), 意图(in), 可选 :: right

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

私有子程序 select_1_rsp_int32(a, k, kth_smallest, left, right)

选择 - 在 a(:) 中选择第 k 小的元素。

部分来自 Leon Foks 的 "Coretran" 实现的 quickSelect,https://github.com/leonfoks/coretran

参数

类型 意图可选 属性 名称
实数(kind=sp), 意图(inout) :: a(:)

我们在其中寻找第 k 小的元素的数组。在输出中,它将被部分排序,使得 all(a(1:(k-1)) <= a(k)) .and. all(a(k) <= a((k+1):size(a))) 为真。

整数(kind=int32), 意图(in) :: k

我们想要第 k 小的元素。例如 k=1 导致 kth_smallest=min(a),并且 k=size(a) 导致 kth_smallest=max(a)

实数(kind=sp), 意图(out) :: kth_smallest

在输出中包含 a(:) 的第 k 小的值

整数(kind=int32), 意图(in), 可选 :: left

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

整数(kind=int32), 意图(in), 可选 :: right

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

私有子程序 select_1_rsp_int64(a, k, kth_smallest, left, right)

选择 - 在 a(:) 中选择第 k 小的元素。

部分来自 Leon Foks 的 "Coretran" 实现的 quickSelect,https://github.com/leonfoks/coretran

参数

类型 意图可选 属性 名称
实数(kind=sp), 意图(inout) :: a(:)

我们在其中寻找第 k 小的元素的数组。在输出中,它将被部分排序,使得 all(a(1:(k-1)) <= a(k)) .and. all(a(k) <= a((k+1):size(a))) 为真。

整数(kind=int64), 意图(in) :: k

我们想要第 k 小的元素。例如 k=1 导致 kth_smallest=min(a),并且 k=size(a) 导致 kth_smallest=max(a)

实数(kind=sp), 意图(out) :: kth_smallest

在输出中包含 a(:) 的第 k 小的值

整数(kind=int64), 意图(in), 可选 :: left

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

整数(kind=int64), 意图(in), 可选 :: right

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

私有子程序 select_1_rdp_int8(a, k, kth_smallest, left, right)

选择 - 在 a(:) 中选择第 k 小的元素。

部分来自 Leon Foks 的 "Coretran" 实现的 quickSelect,https://github.com/leonfoks/coretran

参数

类型 意图可选 属性 名称
实数(kind=dp), 意图(inout) :: a(:)

我们在其中寻找第 k 小的元素的数组。在输出中,它将被部分排序,使得 all(a(1:(k-1)) <= a(k)) .and. all(a(k) <= a((k+1):size(a))) 为真。

整数(kind=int8), 意图(in) :: k

我们想要第 k 小的元素。例如 k=1 导致 kth_smallest=min(a),并且 k=size(a) 导致 kth_smallest=max(a)

实数(kind=dp), 意图(out) :: kth_smallest

在输出中包含 a(:) 的第 k 小的值

整数(kind=int8), 意图(in), 可选 :: left

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

整数(kind=int8), 意图(in), 可选 :: right

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

私有子程序 select_1_rdp_int16(a, k, kth_smallest, left, right)

选择 - 在 a(:) 中选择第 k 小的元素。

部分来自 Leon Foks 的 "Coretran" 实现的 quickSelect,https://github.com/leonfoks/coretran

参数

类型 意图可选 属性 名称
实数(kind=dp), 意图(inout) :: a(:)

我们在其中寻找第 k 小的元素的数组。在输出中,它将被部分排序,使得 all(a(1:(k-1)) <= a(k)) .and. all(a(k) <= a((k+1):size(a))) 为真。

整数(kind=int16), 意图(in) :: k

我们想要第 k 小的元素。例如 k=1 导致 kth_smallest=min(a),并且 k=size(a) 导致 kth_smallest=max(a)

实数(kind=dp), 意图(out) :: kth_smallest

在输出中包含 a(:) 的第 k 小的值

整数(kind=int16), 意图(in), 可选 :: left

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

整数(kind=int16), 意图(in), 可选 :: right

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

私有子程序 select_1_rdp_int32(a, k, kth_smallest, left, right)

选择 - 在 a(:) 中选择第 k 小的元素。

部分来自 Leon Foks 的 "Coretran" 实现的 quickSelect,https://github.com/leonfoks/coretran

参数

类型 意图可选 属性 名称
实数(kind=dp), 意图(inout) :: a(:)

我们在其中寻找第 k 小的元素的数组。在输出中,它将被部分排序,使得 all(a(1:(k-1)) <= a(k)) .and. all(a(k) <= a((k+1):size(a))) 为真。

整数(kind=int32), 意图(in) :: k

我们想要第 k 小的元素。例如 k=1 导致 kth_smallest=min(a),并且 k=size(a) 导致 kth_smallest=max(a)

实数(kind=dp), 意图(out) :: kth_smallest

在输出中包含 a(:) 的第 k 小的值

整数(kind=int32), 意图(in), 可选 :: left

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

整数(kind=int32), 意图(in), 可选 :: right

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

私有子程序 select_1_rdp_int64(a, k, kth_smallest, left, right)

选择 - 在 a(:) 中选择第 k 小的元素。

部分来自 Leon Foks 的 "Coretran" 实现的 quickSelect,https://github.com/leonfoks/coretran

参数

类型 意图可选 属性 名称
实数(kind=dp), 意图(inout) :: a(:)

我们在其中寻找第 k 小的元素的数组。在输出中,它将被部分排序,使得 all(a(1:(k-1)) <= a(k)) .and. all(a(k) <= a((k+1):size(a))) 为真。

整数(kind=int64), 意图(in) :: k

我们想要第 k 小的元素。例如 k=1 导致 kth_smallest=min(a),并且 k=size(a) 导致 kth_smallest=max(a)

实数(kind=dp), 意图(out) :: kth_smallest

在输出中包含 a(:) 的第 k 小的值

整数(kind=int64), 意图(in), 可选 :: left

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。

整数(kind=int64), 意图(in), 可选 :: right

如果我们知道:a 的第 k 小的元素在 a(left:right) 中,并且:maxval(a(1:(left-1))) <= minval(a(left:right)) 以及:maxval(a(left:right))) <= minval(a((right+1):size(a))) 则可以指定一个或两个边界以缩小搜索范围。如果我们之前调用过带有不同 k 的子程序,则约束条件可用(因为 a(:) 如何被部分排序,请参阅 a(:) 的文档)。