1
私はC++を教えるためにイテレータを使ってマージソートを書こうとしていますが、何らかの理由でこのコードはコンパイルされていますが、結果はソートされません。誰かが間違っていることを理解できますか?私の訓練されていない目にはまったく問題ないようです。このマージソートコードで何が問題になっていますか?
typedef vector<int> vec_int;
typedef vector<int>::iterator vec_int_iter;
void merge_sort(vec_int& vec, vec_int_iter low, vec_int_iter high){
if(low < high){
vec_int_iter med = low + (high-low)/2 ;
merge_sort(vec, low, med);
merge_sort(vec, med+1, high);
arrange(vec, low, med, high);
}
}
void arrange(vec_int& vec, vec_int_iter low, vec_int_iter med, vec_int_iter high){
vec_int_iter left = low, right = med+1;
vec_int temp;
temp.clear();
vec_int_iter it = temp.begin();
while(left <= med and right <= high)
temp.push_back((*left < *right)? *left++ : *right++);
while(left <= med)
temp.push_back(*left++);
while(right <= high)
temp.push_back(*right++);
vec = temp;
}
感謝を!これははるかに理にかなっています! –