Вроде как алгоритм верный, но результат не выводит. Подскажите в чем проблема.
#include <iostream>
#include <vector>
#include <ctime>
using namespace std;
void mergeSort(vector<int> &vec, int start, int end)
{
if(end - start < 2) return;
if(end - start == 2)
{
if(vec[start] > vec[start + 1])
swap(vec[start], vec[start + 1]);
return;
}
mergeSort(vec, start, (end - start) / 2);
mergeSort(vec, (end - start) / 2, end);
vector<int> buffer;
int begin1 = start, end1 = (end - start) / 2, begin2 = end1;
while(buffer.size() < end - start)
{
if((begin1 >= end1) || ( (begin2 < end) && (vec[begin2] <= vec[begin1]) ) )
{
buffer.push_back(vec[begin2]);
begin2++;
}
else
{
buffer.push_back(vec[begin1]);
begin1++;
}
}
for(int i=start; i<end; i++)
vec[i] = buffer[i - start];
}
int main()
{
vector<int> vec;
for(int i=0; i<10; i++)
vec.push_back(i);
srand(time(NULL));
for(unsigned int i=0; i<vec.size(); i++)
swap(vec[i], vec[rand() % (vec.size() - i) + i]);
for(unsigned int i=0; i<vec.size(); i++)
cout << vec[i] << " ";
cout << endl;
mergeSort(vec, 0, vec.size());
for(unsigned int i=0; i<vec.size(); i++)
cout << vec[i] << " ";
cout << endl;
return 0;
}
В трех местах нужно (end-start)/2
заменить на (end+start)/2
:
mergeSort(vec, start, (end + start) / 2);
mergeSort(vec, (end + start) / 2, end);
vector<int> buffer;
int begin1 = start, end1 = (end + start) / 2, begin2 = end1;
Вам же нужна средина отрезка, а не половина его длины...
Проблема в том что он у тебя уходит в бесконечную рекурсию и у тебя заканчивается стек для хранения переменных и кидает SIGSEGV. Ну или работает очень долго и не завершается(зависит от размера стека).
вангую что ошибка где то в
mergeSort(vec, start, (end - start) / 2);
mergeSort(vec, (end - start) / 2, end);
рекомендую заменить end на size.(так будет лаконичней смотреться и легче дебажить)
То есть копай в сторону условия выхода из рекурсии.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Необходимо сделать проверку пароля в режиме живого времени по каждому символуТ