それは、ファイルのm行mに操作だんマージソートは、各上ダブルスメートルをマージし、ここで渡すコードボトムアップマージ
#include <iostream>
#include <vector>
using namespace std;
inline int Min(int a,int b)
{
return a<b?a:b;
}
void merge(int a[],int l,int m,int r)
{
vector<int>b;
int i, j;
for (i=m+1;i>=l;i--) b[i-1]=a[i-1];
for (j=m;j<r;j++) b[r+m-j]=a[j+1];
for (int k=l;k<=r;k++)
if (b[j]<b[i])
a[k]=b[j--];
else
a[k]=b[i++];
}
void mergesort(int a[],int l,int r)
{
for (int m=1;m<=r-l;m=m+m)
for (int i=l;i<=r-m;i+=m+m)
merge(a,i,i+m-1,Min(i+m+m-1,r));
}
int main()
{
int a[]={12,4,7,3,9,8,10,11,6};
int n=sizeof(a)/sizeof(int);
mergesort(a,0,n-1);
for (int i=0;i<n;i++)
{
cout<<a[i]<< " ";
}
return 0;
}
ですが、私はこのコードを実行すると例外がありますこれは、範囲エラーのベクトルのうちは、あなたが空のベクターとしてb
を作成し、その要素に取り組む開始
例外はどの回線から発生していますか?どんな要素にアクセスしようとしていましたか、そしてそのベクトルがどれくらい大きいと思いますか?その時点であなたのコールスタックはどれくらい深いですか?インデックスが範囲外かどうか、i、j、またはkですか? 正直なところ、@ user466441、あなたの質問のほとんどは、情報や努力なしに、「ここにはたくさんのコードがあり、助けてください」というものです。 – abelenky
あなたのコードを再フォーマットしました。しかし、より一貫した書式設定でも、貧弱な変数名、括弧の一貫しない使用、およびfor単一行のステートメントは修正されません。 – abelenky