【发布时间】:2016-10-11 06:32:50
【问题描述】:
我有一个包含单词列表的文本文件。
我使用ifstream 将这些单词读入vector,现在我尝试按类似于以下的顺序对它们进行排序:
A a B b C c [...]
我尝试在气泡搜索算法中使用第三个 for 循环来实现这一点,以查看每个单词的第一个字符(我知道这远非最有效的方法,尤其是在我使用大型数据集时)
然后检查字母和下一个字母是大写还是小写,如果大写字母与当前字母相同,则切换,但这似乎不起作用。
void bubble_Sort (vector <string> & words)
{
for (unsigned i = words.size(); i >= 2; --i)
{
for (unsigned k = 0; k + 1 < i; k++)
{
int hi = k+1;
string temp1 = words[hi];
string temp2 = words[k];
int smallsize = words[hi].size();
int smallprecedence = 0;
if (words[k].size() < words[hi].size())
smallsize = words[k].size();
for (unsigned j = 0; j < smallsize; j++)
{
if (temp1[j] >= 'A' && temp1[j] <= 'Z')
{
if (temp2[j] >='a' && temp2[j] <= 'z')
{
char lowercase1 = temp1[j] + 32;
if (lowercase1 == temp2[j])
{
string temp = words[k];
words[k] = words[hi];
words[hi] = temp;
break;
}
}
else if (temp2[j] >= 'A' && temp2[j] <= 'Z')
{
if (temp1[j] < temp2[j])
{
string temp = words[k];
words[k] = words[hi];
words[hi] = temp;
break;
}
}
}
if (temp1[j] >= 'a' && temp1[j] <= 'z')
{
if (temp2[j] >= 'A' && temp2[j] <= 'Z')
{
char uppercase1 = temp1[j] - 32;
if (uppercase1 < temp2[j])
{
string temp = words[k];
words[k] = words[hi];
words[hi] = temp;
break;
}
}
else if (temp2[j] >= 'a' && temp2[j] <= 'z')
{
if (temp1[j] < temp2[j])
{
string temp = words[k];
words[k] = words[hi];
words[hi] = temp;
break;
}
}
}
else if (temp1[j] == temp2[j] && temp1.size() < temp2.size())
++smallprecedence;
}
if (smallprecedence == smallsize)
{
string temporary = words[k];
words[k] = words[hi];
words[hi] = temporary;
}
}
}
}
【问题讨论】:
-
您是否正在实施自己的冒泡排序作为练习?如果没有,你应该使用
std::sort并实现比较功能。 -
是的,我正在尝试使用冒泡排序按 A a B b 等顺序对向量进行排序,即使在 ascii 中 a 大于 B,这是我一直遇到的问题有。
标签: c++ sorting vector ascii bubble-sort