我正在尝试进行插入排序,但顺序与正常相反(从第二个元素开始到最后一个元素,而不是第二个元素)。矢量应该按升序转换。
这是我所拥有的,但它不起作用(超出界限错误):
void sort(vector<double> &a) {
for (int n = a.size() - 2; n >= 0; --n) {
double aTemp = a.at(n);
int i = n+1;
while (i < a.size() - 1 && aTemp < a.at(i)) {
a[i] = a[i + 1];
++i;
}
a[i+1] = aTemp;
}
}
int main() {
vector<double> a = {3, 2, 5, 8, 1, 9};
sort(a);
for (int i = 0; i < a.size(); ++i) {
cout << a[i] << ' ';
}
return 0;
}
答案 0 :(得分:1)
我假设您确实知道STL排序功能,并且只是尝试使用插入排序。
你的逻辑大部分是正确的。我发现的唯一问题是你离开a[n]
'洞'未填充,最坏的情况是在a[a.size()]
中添加项目。
int i = n;
while (i < a.size() - 1 && aTemp > a.at(i+1)) {
a[i] = a[i + 1];
++i;
}
a[i] = aTemp;
用solved替换问题。