如何修改合并排序只返回元素的索引而不进行排序?

时间:2017-04-08 12:19:47

标签: algorithm recursion

如何在不对数组进行排序的情况下递归获取某个元素的索引?

2 个答案:

答案 0 :(得分:0)

在这种情况下,强力搜索和递归搜索都具有相同的时间复杂度。但是如果你想要递归版本,那么伪代码会:

  1. 调用一个带数组和键的函数进行搜索。为数组创建一个静态索引。

  2. 检查索引是否超出范围然后返回-1(表示未找到)

  3. 检查数组中的当前元素是否为key。 if true返回静态索引;

  4. 否则通过递增索引来返回函数调用。

答案 1 :(得分:0)

问题可能是指在排序列表中找到某个元素的等级。

实际上,此操作不需要显式排序数组,而只是计算有多少元素小于它(假设升序排序)。

最好的复杂性是O(n),因为需要检查每个元素。

使用非递归方法实现O(n)复杂度非常简单 - 只需遍历所有元素,并在每次遇到较小元素时增加计数器。计数器的最终值表示感兴趣元素在排序数组中的位置(请注意,这是在未明确排序的情况下获得的。)

下面说明了一个模拟这种行为的简单递归解决方案(使用c风格的代码):

getRank(int value, int* array, int nElements) {
    if (nElements == 0) return 0;

    if (array[0] < value)
        return 1 + getRank(value, array + 1, nElements - 1);
    else
        return getRank(value, array + 1, nElements - 1);
}