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