使用排序数组实现集合

时间:2015-12-14 21:09:40

标签: c++ arrays set

这是一个数据结构问题,但也涉及实施。一组通常使用BST实现,但我的教授希望我们知道如何仅在给定有限选项时实现某些数据结构。因此,他希望我们能够理解如何仅使用数组创建集合。

使用标准(未排序)数组我理解实现/复杂性......

void add(Student[] arr, Student findstu)
{
    Student stu = new Student();
    int i=0;
    boolean found = false;
    while(stu!=NULL)
    {
        stu = arr[i++];
        if (stu==findstu)
        {
             found = true;
        }
     }
    if (found==false)
    {
         arr[i+1] = findstu;
    }
 }

add / remove / contains是几乎相同的代码,所有都将有第一个while循环,这将使它们成为O(n)。

但是如果我们使用排序数组,为什么包含O(lgn)并添加/删除O(n)?

1 个答案:

答案 0 :(得分:4)

搜索将是O(logN),因为由于数组已排序,您可以应用O(logN)复杂度的二进制搜索。

插入和擦除将是O(N)复杂度(即线性时间),因为每次尝试插入或擦除已排序数组中的元素时,您必须将数组元素移位一个位置,即O(N)线性时间复杂度。