Witam, prosiłbym o pomoc z tym programem. Cały kod wydaje się być poprawnie zapisany, natomiast ani w Devie, ani w Visualu nie udaje mi się go skompilować. Visual wskazuje na zatrzymanie w momencie rozpoczynanie procedury merge_sort.
#include <iostream>
#include <cstdlib>
#include <iomanip>
#include <time.h>
#include <cmath>
using namespace std;
void merge(int tab[], int l, int srodek, int r)
{
int *tab_pom = new int[r - l]; // utworzenie dynamicznej tablicy pomocniczej
int i = l;
int j = srodek + 1;
int k = 0; // indeksy tablicy pomocniczej
while (i <= srodek && j <= r) // przepisujemy mniejszy element, dopóki któryś z podzielonych podzbiorów się nie skończy
{
if (tab[j] < tab[i])
{
tab_pom[k] = tab[j];
j++;
}
else
{
tab_pom[k] = tab[i];
i++;
}
k++;
}
if (i <= srodek) // jeśli zostały nam tylko elementy lewego podzbioru
{
while (i <= srodek)
{
tab_pom[k] = tab[i]; // po prostu przepisujemy elementy
i++;
k++;
}
}
else
{
while (j <= r) // jeśli zostały nam elementy prawej podzbioru
{
tab_pom[k] = tab[j]; // przepisujemy elementy
j++;
k++;
}
}
for (i = 0; i <= r - l; i++)
tab[l + i] = tab_pom[i]; // przepisujemy elementy do tablicy głównej
delete tab_pom;
}
void merge_sort(int tab[], int l, int r)
{
int srodek;
if (l != r)
{
srodek = (l + r) / 2;
merge_sort(tab, l, r);
merge_sort(tab, srodek + 1, r);
merge(tab, l, srodek, r);
}
}
int main()
{
const int d = 10;
int tab2[d] = { 23, 45, 23, 11, 24, 65, 931, 11, 2, 40 };
cout << "PRZED SORTOWANIEM:" << endl << endl;
for (int i = 0; i < d; i++) // wypisanie posortowanej tablicy
cout << "tab[" << i << "] = " << tab2[i] << endl;
cout << endl;
merge_sort(tab2, 0, 9);
cout << "PO SORTOWANIU:" << endl << endl;
for (int i = 0; i < d; i++) // wypisanie posortowanej tablicy
cout << "tab[" << i << "] = " << tab2[i] << endl;
system("pause");
}