插入排序从向量结束开始

时间:2018-05-18 21:46:10

标签: c++ sorting c++11

我正在尝试进行插入排序,但顺序与正常相反(从第二个元素开始到最后一个元素,而不是第二个元素)。矢量应该按升序转换。

这是我所拥有的,但它不起作用(超出界限错误):

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;
}

1 个答案:

答案 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替换问题。