试试这个:
void selectionSort(vector<string>& dictionary)
{
for (int i = 0; i < dictionary.size(); ++i)
{
int m = i;
for (int j = i + 1; j < dictionary.size(); ++j)
{
if (dictionary[j] < dictionary[m])
m = j;
}
if (m != i)
swap(dictionary[i], dictionary[m]);
}
}
基本上当你i-loop
开始你认为m
个元素是最小的,然后里面j-loop
您检查剩余的元素,如果有一个更小的元素。如果你发现更小的元素,你更新m
(而不是复制实际的字符串)。在循环结束时,您检查m
是否从i
更改,如果是这样,您交换i
和m
的元素。
Here's full example with your input,问问题时,它的建议,以提供类似的小例子,可以很容易地重现您的问题:
#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
#include <assert.h>
using namespace std;
void selectionSort(vector<string>& dictionary)
{
for (int i = 0; i < dictionary.size(); ++i)
{
int m = i;
for (int j = i + 1; j < dictionary.size(); ++j)
{
if (dictionary[j] < dictionary[m])
m = j;
}
if (m != i)
swap(dictionary[i], dictionary[m]);
}
}
int main()
{
vector<string> data{ "hey", "ok", "so", "no", "okay" };
vector<string> data2 = data;
selectionSort(data);
std::sort(data2.begin(), data2.end());
assert(equal(data.begin(), data.end(), data2.begin())); // verify that your sort matches what std::sort does
for (const auto s : data)
cout << s << ' ';
cout << endl;
}
,输出是:
hey no ok okay so
问问自己,如果内环会发生什么* *不**找到一个小于外循环中的元素。 –
嗨,欢迎来到StackOverflow。你的问题是非常清楚的陈述,但你的代码片段不会作为一个独立的程序。有人想要运行你的代码,必须建立一个main声明一个合适的'vector',调用'selectionSort'并输出结果。这些都不是很难做到,但这需要花费时间和精力。在StackOverflow中,如果你的文章包含了所谓的[mcve],你通常会提高获得有用答案的机会。 MCVE可让您的读者快速(轻松)对您的问题进行实验 –