Witam uczę się programować i postanowiłem nauczyć się algorytmów sortowania kilku już się nauczyłem i dotarłem do kolejnego który jest już nieco trudniejszy, napisałem kod dla kilku przykładów działa, ale chciałem się upewnić czy napewno i czy może jest coś do poprawy oto kod:
#include <iostream>
using namespace std;
void scalanie(int *tab, int l, int p, int q) {
int *pom = new int[p-l+1];
int s = q + 1,k = 0,pocz = l;
while (l <= q && s <= p) {
if (tab[l] < tab[s]) {
pom[k] = tab[l];
l++;
}
else {
pom[k] = tab[s];
s++;
}
k++;
}
while (l <= q) {
pom[k] = tab[l];
l++;
k++;
}
while (s <= p) {
pom[k] = tab[s];
s++;
k++;
}
k = 0;
for (int i = pocz; i <= p; i++)
tab[i] = pom[k++];
}
void merge_sort(int *tab, int l, int p) {
if (l != p) {
int q = (l + p) / 2;
merge_sort(tab,l,q);
merge_sort(tab,q+1,p);
scalanie(tab,l,p,q);
}
}
int main()
{
int n,l = 0,p;
cin >> n;
p = n - 1;
int *tab = new int[n];
for (int i = 0; i < n; i++) cin >> tab[i];
merge_sort(tab,l,p);
for (int i = 0; i < n; i++)
cout << tab[i] << " ";
cout << "\n";
return 0;
}