Witam!
Miałem za zadanie napisać program wykonujący sortowanie przez scalanie przy użyciu vectorów i pomocniczego kontenera queue. Problem jest taki, jak w temacie. Po podaniu liczb, które mają zostać posortowane, wyskakuje błąd "stack overflow". Byłbym niezwykle wdzięczny za możliwie najszybszą pomoc. Muszę to zrobić jeszcze tej nocy. Dziękuję! :)
#include <iostream>
#include <vector>
#include <new>
#include <queue>
using namespace std;
vector<float> scalanie(vector<float> &liczby, vector<float> &lewy, vector<float> &prawy)
{
float lewy_p=0;
float prawy_p=0;
queue<float> pom; //Kontener typu queue, który w tej funkcji będzie pełnił rolę pomocniczego kontenera.
if (prawy_p < prawy.size())
{
pom.push(prawy[prawy_p]);
prawy_p++;
}
if (lewy_p < lewy.size())
{
pom.push(lewy[lewy_p]);
lewy_p++;
}
int rozpom = pom.size();
while (lewy_p < lewy.size() && prawy_p < prawy.size())
{
if (lewy[lewy_p] >= prawy[prawy_p])
{
pom.push(prawy[prawy_p]);
prawy_p++;
}
else
{
pom.push(lewy[lewy_p]);
lewy_p++;
}
}
vector<float>posortowane;
for (int j = 0; j < rozpom; j++)
{
posortowane.push_back(pom.front());
pom.pop();
}
return posortowane;
}
vector<float> podzial(vector<float> &liczby ) //Funkcja dzieli wektor na mniejsze, aż do jednowartościowych.
{
if (liczby.size() != 1)
{
vector<float>::iterator mid= liczby.begin() + ((1 / 2)*liczby.size());
vector<float> liczby_lewy(liczby.begin(), mid); //Tworzymy dwa wektory z wartościami będącymi odpowiednia pierwszą i drugą połową wektora "liczby".
vector<float> liczby_prawy(mid, liczby.end());
liczby_prawy = podzial(liczby_prawy);
liczby_lewy = podzial(liczby_lewy);
return scalanie(liczby,liczby_lewy,liczby_prawy);
}
else
{
return liczby;
}
}
int main()
{
vector < float > liczby;
vector<float>posortowane;
cout << "Podaj, ile liczb chcesz posortowac." << endl;
int ilosc;
cin >> ilosc;
cout << "Podaj te liczby." << endl;
float liczba;
for (int i = 0; i < ilosc; i++)
{
cin >> liczba;
liczby.push_back(liczba);
}
system("pause");
system("cls");
liczby=podzial(liczby)
cout << "Posortowane liczby: " << endl;
for (int i = 0; i < ilosc; i++)
{
cout << liczby[i] << ' ';
cout << "\n";
}
system("pause");
}