Kendimi C++ öğretmek için yineleyiciler kullanarak birleştirme sıralama yazmaya çalışıyorum, ancak bir nedenle bu kod derleniyor ama sonuç sıralanmaz. Birisi neyin yanlış olduğunu anlayabilir mi? eğitimsiz gözlerime mükemmel görünüyor.Bu birleştirme sıralama koduyla ilgili sorun nedir?
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;
}
teşekkür:
İşlevin düzenlemek yeni bir vektör her zaman dönmek veya bunu in place
Örnek kod yapın değiştirebilirsiniz! Bu çok daha mantıklı! –