Я пытаюсь написать сортировку слиянием, но программа падает. Поэтому решила для начала проверить правильно ли работает функция merge, но она работает нормально.
vector<int> merge(vector<int>& b, vector<int>& c){
size_t nb = b.size();
size_t nc = c.size();
int i = 0;
int j = 0;
vector<int> d;
while(i <= nb && j <= nc){
if (b[i] <= c[j]){
d.push_back(b[i]);
i++;
} else {
d.push_back(c[j]);
j++;
}
}
while (i < nb){
d.push_back(b[i]);
i++;
}
while (j < nc){
d.push_back(c[j]);
j++;
}
return d;}
Вот сама функция merge_sort:
vector<int> merge_sort(vector<int>& a, int left, int right){
vector<int> res;
if (left < right){
int m = right / 2;
vector<int> b, c;
b = merge_sort(a, left, m - 1);
c = merge_sort(a, m, right);
res = merge(b, c);
}
return res;}
С чем может быть связана проблема? Я подозреваю, что проблема где-то в условии
if (left < right)
В main вызываю merge_sort(a, 0, n), где n размер массива a.
vector<int> merge_sort(vector<int>& a, int left, int right){
vector<int> res;
if (left < right){
//int m = right / 2;
int m = (left + right) / 2;
vector<int> b, c;
//b = merge_sort(a, 0, m - 1);
b = merge_sort(a, left, m );
//c = merge_sort(a, m, right);
c = merge_sort(a, m + 1, right);
res = merge(b, c);
}
else res .push_back( a[left] );
return res;}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
У меня есть некоторый набор точек, который проходит через vtkDelaunay2D (триангуляцию) и vtkSmoothPolyDataFilter (сглаживание), соответственно, получается...
для класса String требуется перегрузить несколько операторов,возник вопрос с перегрузкой оператора ()(int,int) -возвращение подстроки объектаКак...
Всем приветВ общем, создал проект Windows Application С++