我尝试使用矢量为学校项目创建合并排序。没有得到想要的输出

I tried creating merge sort using vectors for a school project. Didn't get the desired output


#include<iostream>
#include<vector>
using namespace std;
void sort(vector <int> &v, int i, int j, int end2)
{
    vector <int> v1;
    int start1=i, start2=j, end1=j;
    while((start1<end1)||(start2<end2))
    {
        if((start1<end1)&&(start2<end2))
        {
            if(v[start1]<v[start2])
            {
                v1.push_back(v[start1]);
                start1++;
            }
            else if (v[start1]==v[start2])
            {
                v1.push_back(v[start1]);
                start1++;
                start2++;
            }
            else
            {
                v1.push_back(v[start2]);
                start2++;
            }
        }
        else if((start1<end1)&&(start2>=end2))
        {
            v1.push_back(v[start1]);
            start1++;
        }
        else if((start1>=end1)&&(start2<end2))
        {
            v1.push_back(v[start2]);
            start2++;
        }
    }
    int s=i;
    while(s<end2)
    {
        v[i]=v1[i];
        i++;
    }
}
void mergeSort(vector <int> &v, int s)
{
    int low, end2, high;
    for(int k=2;k<=s;k=k*2)
    {
        for(int i=0;i+k-1<s;i=i+k)
        {
            low=i;
            high=i+k;
            end2=i+2*k;
            sort(v, low, high, end2);
        }
    }
}
int main()
{
    vector <int> v;
    int n;
    cout<<"Enter the no. of elements you want to sort\n";
    cin>>n;
    int d;
    cout<<"Enter the values\n";
    for(int i=0;i<n;i++)
    {
        cin>>d;
        v.push_back(d);
    }
    int s= v.size();
    mergeSort(v, s);
    for(int i=0;i<n;i++)
    {
        cout<<v[i]<<"\t";
    }
    cout<<endl;
}

所以我在代码块上写了这段代码,当我尝试执行它时,它要求我输入要排序的值。我输入这些值,突然屏幕显示分段错误并关闭程序。请帮助我更正此代码以进行合并排序。我最近开始使用 stls 并在使用它们时感到困惑。

这段代码是做什么用的?

int s=i;
while(s<end2)
{
    v[i]=v1[i];
    i++;
}

恕我直言,应该删除。

这个代码不应该

        else if (v[start1]==v[start2])
        {
            v1.push_back(v[start1]);
            start1++;
            start2++;
        }

真的是这个吗?

        else if (v[start1]==v[start2])
        {
            v1.push_back(v[start1]);
            v1.push_back(v[start2]);
            start1++;
            start2++;
        }

否则你的最终数组会比原来的数组短。

深思熟虑,如前所述,您应该使用调试器进行调查。