如何使用双向搜索按字母顺序将随机字符串添加到数组中
How to add random strings alphabetically to an array using a Bi-Sectional Search
这是我的加法函数。我还没有完成,我必须使用顺序搜索将字符串添加到数组中,以找到要按字母顺序添加的插入点。我刚刚包含了这个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集合也可以达到目的。
相关文章:
- 字符串-C++后显示的随机字符
- 在c++构造函数中使用随机字符串生成器
- 使用std::mt19937从字符串中返回一个随机单词
- 尝试使用C++中的模板进行BST排序,但在使用随机字符串进行测试时不起作用
- 我的求解(字符串 a、字符串 b)的输出与随机哈希中的预期输出不匹配
- 将字符串转换为 int 后的随机值
- 我可以比朴素哈希表更快地将随机字符串映射到两个类吗?
- C++读取大文件并将其保存到字符串中,然后删除特定的随机单词
- 提取字符串中的随机单词
- 选择随机字符串数组的排序
- 生成随机长度的数字字符串
- 随机字符,从强制转换 Arduino 字符串到 Excel BSTR 通过 c++ DLL
- 这个随机字符串打印代码有什么问题?
- 尝试以随机字符(长读取)打印字符串返回结果
- 随机添加到字符串C++的空字符
- C++随机名称生成器给出重复字符串
- 如何生成伪随机 32 字节字符串以用作加密哈希函数中的盐?
- 队列快速排序不排序和打印随机字符串[C ]
- 随机字符串生成器不编辑我的字符串数组 (C++)
- 在长字符串(随机位置)中的C char搜索