如何使用双向搜索按字母顺序将随机字符串添加到数组中

How to add random strings alphabetically to an array using a Bi-Sectional Search

本文关键字:字符串 随机 添加 数组 顺序 双向搜索 何使用      更新时间:2023-10-16

这是我的加法函数。我还没有完成,我必须使用顺序搜索将字符串添加到数组中,以找到要按字母顺序添加的插入点。我刚刚包含了这个b/c,我们在添加随机字符串时使用它。

void StringList::add(string s) 
{
    str[numberOfStrings++]=s;       
}

这是我的平分搜索函数

int StringList::bsearch(string key, int start, int end)
{
    int middle = (end + start)/2;
if(key>str[middle])
{
    return bsearch(key, middle+1, end);
}
else if (key<str[middle])
{
    return bsearch(key, start, middle);
}
else if(start==end)
{
    return -1;
}
}

以下是我的代码,用于向数组中添加随机数目的字符串。(在使用转换器的单独cpp文件中)

if((token[0]=="ADDRAND")||(token[0]=="AR"))
{
    int count = stringToInt(token[1]);
    for(int i=0;i<count;i++)
    {
        stringList.add(randString(20));
    }
    result = "Random Strings added.n";
}

如何使用双截搜索将随机字符串按字母顺序添加到数组中?

首先要做的是修改bsearch(),这样它就可以在找不到字符串时返回插入字符串的索引(一个好的开始可能是返回start而不是-1,但我不知道这是否足够)。

如果您能够找到要插入的索引,则必须将该索引之后的所有元素推一步,为该字符串腾出位置。因此,每一步都需要线性时间。我不认为您能够使用您的双分区搜索方法来动态更新数组并保持其排序。如果您试图将已排序的字符串保持在连续的字符串索引中,则在数组中插入字符串或搜索索引都需要时间。

为此,您需要使用一些树结构,如AVL树或RB树。此外,如果您需要现成的结构,stl集合也可以达到目的。