Witam, mam problem z implementacją merge sorta:
void scalaj(int *tab, int left, int mid, int right)
{
int sizet = right - left;
int *tab2 = new int [sizet+1]; // tablica tymczasowa
int l = left;
int l1 = mid + 1;
int i = 0;
while(l < mid+1 && l1 <= right){
if(tab[l] < tab[l1]){
tab2[i] = tab[l];
i++;
l++;
}
else{
tab2[i] = tab[l1];
i++;
l1++;
}
}
if(l > mid){
for(int j = l1 ; j < right; j++ ){
tab2[i] = tab[j];
i++;
}
}
else{
for(int j = l ; j < mid+1; j++ ){
tab2[i] = tab[j];
i++;
}
}
l = left;
for(int i = 0; i < sizet+1; i++){
tab[l] = tab2[i];
l++;
}
delete[] tab2;
}
void merge_sort(int *tab, int left, int right){
int mid;
if(left < right){
mid = (right + left)/2;
merge_sort(tab, left, mid);
merge_sort(tab, mid+1,right);
scalaj(tab, left, mid, right);
}
}
void show(int *tab){
for(int i = 0; i < 7 ;i++)
{
cout << tab[i] << endl;
}
}
int main()
{
int tab[7]= {4,4,3,2,1,5,9};
merge_sort(tab, 0, 6);
show(tab);
return 0;
}
Po oglądnięciu filmu jak działa merge sort, postanowiłem go zaimplementować, początkowo to nic nie działało ale ostatecznie problem jest w tym że gubię "5", no nie wiem kiedy. Dzięki z góry za pomoc.