1
我试图让此代码正常工作。出于某种原因,算法不会被调用,或者没有以正确的方式实现。如果我运行编译得很好的代码,我会返回相同的未分类输入。我尝试了一些通过矢量的东西,但我不确定这个问题在哪里。将向量传递给函数
#include <iterator>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <vector>
void shift_down(std::vector<int> v, int i, int s){
while (i*2 + 1 < s) {
int child = 2*i + 1;
if ((child + 1 < s) && v[child] < v[child+1]) child++;
if (v[i] < v[child]) {
std::swap(v[i],v[child]);
i = child;
}
else
return;
}
}
void heap_sort(std::vector<int> v, int s){
for (int i = s/2; i >= 0; i--) {
shift_down(v, i, s);
}
while (s-1 > 0) {
std::swap(v[s-1], v[0]);
shift_down(v, 0, s-1);
s--;
}
}
int main(){
std::string line;
std::vector<int> vec;
std::cout << "Please enter numbers seperated by spaces:" << std::endl;
std::getline(std::cin, line);
std::istringstream stream(line);
std::copy(std::istream_iterator<int>(stream),
std::istream_iterator<int>(),
std::back_inserter(vec));
int size = vec.size();
heap_sort(vec,size);
std::copy(vec.begin(),vec.end(),
std::ostream_iterator<int>(std::cout, "\t"));
std::cout<<"\t"<<std::endl;
return 0;
}
以引用为参照向量,修改函数本地副本。 – Borgleader 2014-12-07 02:18:56
感谢您的提示,它现在有效。 @Borgleader – user3697516 2014-12-07 03:05:53