我的选择排序功能C 有什么问题

What is wrong with my selection sort function c++?

本文关键字:什么 问题 功能 选择 排序 我的      更新时间:2023-10-16
void selectionSort (vector<string>& dictionary)
{
    string min;
    for (int i = 0; i < dictionary.size(); ++i)
    {
        for (int j = i + 1; j < dictionary.size(); ++j)
        {
            if (dictionary.at(j) < dictionary.at(i))
            {
                min = dictionary.at(j);
            }
        }
        swap(dictionary.at(i), min);
    }
    return;
}

我输入了5个输入:嘿,好的,所以,不,好

输出:不,好的,所以,不

有人可以解释我在分类功能上出错的地方吗?谢谢!

尝试一下:

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 -th元素是最小的,然后在j-loop内部,您是否在较小的元素中检查剩余元素。如果找到较小的元素,则更新m(而不是复制实际字符串(。在循环结束时,您检查m是否从i更改,如果是这样,则在im上交换元素。

以下是您输入的完整示例,当提出问题时,建议提供类似的最小示例,可以轻松复制您的问题:

#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