Cześć i czołem. Mam mały problem z funkcją Merge Sort, a mianowicie taki, że nie chce sortować :/ Albo wyświetla po prostu sam wektor bez sortowania, albo pozmienia kompletnie losowo kolejność, albo w ogóle zmieni wartość jakiegoś elementu na 0. Co jest w tym kodzie nie tak?
Dodam jeszcze, że w mainie proszę użytkownika o podanie długości wektora i przypisuje mu wartości całkowicie losowo, ale nie wiem w sumie czy będzie to miało jakiś związek. Posiłkowałem się wieloma stronami, na których były kody tego sortowania, ale żaden sposób nie zadziałał.
Dalibyście radę mnie chociaż naprowadzić na znalezienie błędu?
Pozdrawiam! :D
void Merge(vector<int>& tablica, int lewy,int srodkowy, int prawy)
{
vector<int> tablica_pomocnicza;
int i=lewy;
int j=srodkowy+1;
if(i<=srodkowy)
{
if(j<=prawy)
{
if(tablica[i]<tablica[j])
{
tablica_pomocnicza.push_back(tablica[i]);
i+=1;
}
else
{
tablica_pomocnicza.push_back(tablica[j]);
j+=1;
}
}
else
{
tablica_pomocnicza.push_back(tablica[i]);
i+=1;
}
}
else
{
tablica_pomocnicza.push_back(tablica[j]);
j+=1;
}
for(i=0;i<prawy-lewy-1;i++)
{
tablica[lewy+i]=tablica_pomocnicza[i];
}
}
void MergeSort(vector<int>& tablica, int lewy, int prawy)
{
if(lewy!=prawy)
{
int srodkowy=(lewy+prawy)/2;
MergeSort(tablica, lewy, srodkowy);
MergeSort(tablica,srodkowy+1,prawy);
Merge(tablica,lewy,srodkowy,prawy);
}
}