已要求我创建一个程序,该程序从文件中读取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;
}