排序向量所需的最小交换次数

时间:2019-03-08 19:18:03

标签: c++ sorting vector

已要求我创建一个程序,该程序从文件中读取N个数字(可能包括重复项),并打印将其升序排序所需的最小交换次数。交换可以在任意数量之间执行,它们不必相邻。我在这里找到的所有线程都是关于具有不同元素的数组。

例如:2 1 3 2 2(最小交换数为2)

到目前为止,我对选择排序进行了修改,可悲的是,除了一个测试用例外,它在所有测试用例中均打印正确的结果:

1 2 3 1 3 2 1(结果应该是3个交换,但是我得到4个)

这是我的代码:

#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

void find_min (unsigned short & mindex, vector <unsigned short> vec) {
    mindex = 0;
    for (unsigned int count = 0; count < vec.size(); count++) 
        if (vec[count] <= vec[mindex]) mindex = count;
}

int main() {
    ifstream file("sort.txt");
    unsigned short num, tmp, mindex;
    file >> num; //Get the number of elements
    vector <unsigned short> vec;
    for (int k = 0; k < num; k++) { //Read N elements
        file >> tmp;
        vec.push_back(tmp);
    }
    file.close();
    tmp = 0;
    while (num > 1) {
        find_min(mindex, vec);
        if (vec[0] != vec[mindex]) {
            swap(vec[0], vec[mindex]);
            tmp++;
        }
        vec.erase(vec.begin()); 
        num--;
    }
    cout<<tmp;
    return 0;
}

0 个答案:

没有答案