我想让这段代码正常运行。由于某种原因,算法不会被调用或未以正确的方式实现。如果我运行编译得很好的代码,我会得到相同的未排序输入。我尝试了一些传递矢量的东西,但我不确定摩擦在哪里。
#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;
}
答案 0 :(得分:1)
只需参考矢量:
void heap_sort(std::vector<int>& v, int s){
// ^
void shift_down(std::vector<int>& v, int i, int s){
// ^
您当前正在将传入的向量复制到v
参数中。 v
在函数内被修改,但更改不会传播到原始向量,只传播到函数范围内的那个。