(个人水平有限,请见谅!)
描述:
给出一个无序数列,每次只能交换相邻两个元素,求将原数列变成递增数列的最少交换次数。 如:数列:2,3,1,交换3和1后变成:2,1,3;交换1和2之后变成:1,2,3。总共交换2次。
输入:
逗号隔开的正整数数列。
输出:
正整数。
输入样例:
2,3,1
输出样例:
2
代码示例:
#include <iostream>
#include <bits/stdc++.h>
#include <vector>
#include <string>
using namespace std;
int main()
{
char line[1000001];
int temp = 0;
while (cin.getline(line, 1000000)) {
vector<int> vec;
int num = 0;
int temp = 0;
int sum = 0;
int min = INT_MAX;
char *p = strtok(line, ",");
while(p){
sscanf(p, "%d", &temp);
vec.push_back(temp);
p = strtok(NULL,",");
}
for (int i = 0; i < (); i++)
{
min = INT_MAX;
for (int j = i; j < (); j++)
{
if (vec[j] < min)
{
min = vec[j];
num = j;
}
}
for (int k = num; k > i; k--)
{
vec[k] = vec[k-1];
sum++;
}
vec[i] = min;
}
cout << sum << endl;
}
return 0;
}