Witam, mam problem z zaimplementowaniem Merge Sortu. Gdzieś mi wychodzi poza zakres, bo w ogóle zmienia wartości w tablicy..
#include<iostream>
#include<ctime>
using namespace std;
void merge(int *tab, int pocz, int sr, int kon)
{
int n1 = sr-pocz+1; // n1 i n2 to wielkosci tablic pomocniczych
int n2 = kon-sr;
int *L = new int [n1]; //tablica lewa i prawa przechowuja odpowiednio lewa i prawa czesc podzialu
int *R = new int [n2];
for (int i=0; i<n1; i++) //kopiowanie podzielonej tablicy do lewej i prawej
L[i] = tab[pocz+i];
for (int i=0; i<n2; i++)
R[i] = tab[sr+1+i];
int i = 0;
int j = 0;
for (int k=0; k<=kon; k++) //scalenie do tablicy wejsciowej
if (L[i] <= R[j])
tab[k] = L[i++]; //wpisujemy z L poczym zwiekszamy indeks i
else
tab[k] = R[j++];
delete L;
delete R;
}
void MergeSort (int *tab, int pocz, int kon)
{
int tmp;
if (pocz < kon)
{
tmp = (pocz+kon)/2;
MergeSort(tab, pocz, tmp);
MergeSort(tab, tmp+1, kon);
merge(tab, pocz, tmp, kon);
}
}
int main ()
{
cout << "Podaj wielkosc sortowanej tablicy: ";
int size;
cin >> size;
int *t = new int [size];
srand(time(0));
for (int i=0; i<size; i++)
t[i] = rand()%101;
cout << "Wylosowana tablca: " << endl;
for (int i=0; i<size; i++)
cout << t[i] << " ";
cout << "\n\n Posortowana tablica: \n";
MergeSort(t, 0, size);
for (int i=0; i<size; i++)
cout << t[i] << " ";
getchar();
}