找到将元素插入排序数组的位置

时间:2017-04-18 22:40:26

标签: python algorithm

问题:找到将元素插入排序数组的位置

A[1] > A[2] > A[3] > ... > A[ n ]
  1. 显示最佳和最坏情况。
  2. 编写算法来解决问题
  3. 我的回答:

    最好的情况是T(n)= 1,换言之,在第一个位置,其中n是元素的大小。最坏的情况是T(n)= n + 1,换句话说最后一个位置+ 1。

      def find_position(element, l):
            i = 0
            inserted = False
            for item in l:
                if element < item:
                    inserted =  True
                    break
                i = i +1
            if not inserted:
                return len(l)
            else:
                return i
    

    其他一些学生写了二进制搜索,最糟糕的情况比我的好,并告诉我答案是不正确的。但我不同意,因为编写优化算法的练习并不明确。

    我的逻辑中有错误吗?

3 个答案:

答案 0 :(得分:0)

鉴于你所说的条件很简单:

1)编写算法来解决问题 2)分析所述问题的渐近复杂度

你显然做到了这些。你的解决方案是显而易见的,而不是最好的解决方案。

答案 1 :(得分:0)

只需检查它是否在数字之后(如下所示......)

for l in range(0, len(lst)):
    if lst[l] >= number_to_be_inserted:
        lst.insert(l+1, number_to_be_inserted)
        break

答案 2 :(得分:0)

二元搜索的最佳情况效率为O(1),最坏情况(平均情况)的效率为O(log n)。

public static int searchInsert(int[] nums, int target) {
    int start = 0;
    int end = nums.length - 1;

    if (nums[end] < target) {
        return end + 1;
    } else if (nums[start] >= target) {
        return start;
    }

    while (start < end) {
        int mid = start + (end - start) / 2;
        if (nums[mid] == target) {
            return mid;
        } else if(nums[mid] < target) {
            start = mid + 1;
        } else {
            end = mid;
        }
    }
    return end;
}