@Homemade

Почему моя реализация сортировки слиянием не работает?

Скажите, пожалуйста, почему не работает вот
это
#include <bits/stdc++.h>

using namespace std;

void Merge(int *a,int l,int q,int r)
{
    int sz = r-l+1, s = l;
    bool side = false;
    vector<int> b(sz);
    int mr = q + 1,ml = q,i = 0;
    while((l<=ml)&&(mr<=r)){
        if(a[l]<a[mr]){
            b[i] = a[l];
            l++;
        }else{
            b[i] = a[mr];
            mr++;
        }
        if(l>ml){
            side = true;
        }
        i++;
    }
    if(side){
        for(int j=mr;j<=r;j++){
            b[i] = a[j];
            i++;
        }
    }else{
        for(int j=l;j<=ml;j++){
            b[i] = a[j];
            i++;
        }
    }
    for(int t=s;t<=r;t++)
        a[t] = b[t];
}

void Merge_Sort(int *a,int l,int r)
{
    if(r>l){
        int q = (r+l)/2;
        Merge_Sort(a,l,q);
        Merge_Sort(a,q+1,r);
        Merge(a,l,q,r);
    }
}

int main()
{
    int n;
    cin>>n;
    int *a = new int[n];
    for(int i=0;i<n;i++)
        cin>>a[i];
    Merge_Sort(a,0,n-1);


    cout<<endl;

    for(int i=0;i<n;i++)
        cout<<a[i]<<" ";

    return 0;
}
  • Вопрос задан
  • 71 просмотр
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
При копировании назад из временного массива b в массив a у вас индексация с ошибкой. Хоть b индексируется с 0, вы обращаетесь к элементам начиная с s.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы