-2
マージソートを実装しようとしています。私は、マージに問題があるが、私は入力9 8 7 6 5 4 3 2 1
でマージソートマージン
void mergeArays(vector<int> &a , int low , int mid , int high){
int i = 0;
int j = mid + 1;
vector<int> final;
while(i != mid && j!= high){
if(a[i] < a[j]){
final.push_back(a[i++]);
continue;
}
final.push_back(a[j++]);
}
for(int i = 0; i < final.size() ;i++){
a[i] = final[i];
}
}
を宣言した
私はマージ機能に
void mergeSort(vector<int> &a , int low , int high){
if(low < high){
int mid = (low + high)/2;
mergeSort(a , low , mid);
mergeSort(a , mid + 1 , high);
mergeArays(a , low , mid , high);
}
}
を宣言している、それはcompetely間違った出力をスローします。マージの背後にある私の論理のバグやミスはどこにありますか?私はそれを見つけることができません、私はそれが良いはずですそれをcalcualteしようとするたびに。
おかげ
「int i = 0;」はおそらく 'int i = low;'であるべきです。あなたは「低」を渡してもそれを使用しないことに驚いていませんか? –
それは感謝しましたが、それでもまだ間違った出力をスローします。{ –
'final'はソートされた' [low、high] '範囲を表す' high-low'要素を持っています。しかし、 'low'ではなく' 0'から 'a'にコピーします。 –