Сортировка индексов слиянием
ID и IDX
получается так
в ID1.мы записываем IDX
ID записываем IDX
а в IDX записываем ID
как переделать так, что работало как положено. Чтоб выводило саму перестановку и сортированный массив.
надо убрать как то ID или IDX
нефига не пойму
#include "stdafx.h"
#include <iostream>
#include <cstdio>
#include <cmath>
#include <vector>
#include <string>
using namespace std;
const int inf = 1000 * 1000;
vector<int>idx;
void tomerge(vector<int>& a, int l, int m, int r){
vector<int> id1, id2;
int i, j;
for (i =l ; i <= m; ++i){
id1.push_back(idx);
}
for (i = m + 1; i <= r; ++i){
id2.push_back(idx);
}
/vector<int> id;
i = 0;
j = 0;
while (i != id1.size() || j != id2.size()){
if (i == id1.size()) {
while (j < id2.size() ) {
id.push_back(id2[j]);
++j;
}
break;
}
if (j == id2.size()) {
while (i < id1.size() ) {
id.push_back(id1);
++i;
}
break;
}
if (a[id1] < a[id2[j]]) {
id.push_back(id1);
++i;
}
else {
id.push_back(id2[j]);
++j;
}
}
for (i = 0; i < id.size(); ++i){
idx[i + l] = id;
}
}
void merge_sort(vector<int>& a, int l, int r) {
int m = (l + r) >> 1;
if (l == r) return;
merge_sort(a, l, m);
merge_sort(a, m + 1, r);
tomerge(a, l, m, r);
}
int main() {
freopen("input.txt", "rt", stdin);
freopen("output.txt", "wt", stdout);
vector<int> a;
int c;
while (cin >> c) a.push_back(c);
idx.resize(a.size() );
for (int i = 0; i < a.size(); ++i) idx = i;
merge_sort(a, 0, a.size() - 1);
for (int i = 0; i < idx.size(); ++i) cout << idx + 1 << " ";
cout << endl;
for (int i = 0; i < a.size(); ++i) cout << a[idx] << " ";
cout << endl;
return 0;
}