向量在排序后不输出排序值

时间:2019-04-20 09:15:17

标签: c++

我正在用C ++编写插入排序,但没有收到排序的输出,而是原始输入

我尝试将输出分配给新矢量,并尝试将这些内容打印出

vector<int> vect = { 4, 3, 2, 1, 5 };
vector<int> answer = Insertion_Sort(vect);
print(vector);

(我已经创建了打印功能),这给我一个错误提示

'conversion from 'int' to non-scalar type 'std::vector' requested'

我已经尝试过了

vector<int> vect = { 4, 3, 2, 1, 5 };
Insertion_Sort(vect);
print(vect)

在这种情况下,它只会给我

4 3 2 1 5

完整代码

#include <iostream>
#include <vector>
using namespace std;

int Insertion_Sort(vector<int> A){
    for (int j = 1; j < A.size(); j++){
        int i = j - 1;
        do{
            A[i + 1], A[i] = A[i], A[i + 1];
            i -= 1;
        }
        while((i > 0) && (A[i] > A[i + 1]));
    }
    return 0;
}

void print(vector<int> const &input)
{
    for (int i = 0; i < input.size(); i++) {
        cout << input.at(i) << ' ';
    }
}

int main(){
    vector<int> vect = {5, 2, 4, 6, 1, 3};
    Insertion_Sort(vect);
    print(vect);
}

我感觉我用向量处理了函数错误,而且我不理解它给我的错误,因为我将向量创建为相同类型

1 个答案:

答案 0 :(得分:1)

一些修复程序。

首先,与许多现代语言一样,C ++没有并行分配。您需要包括

#include <algorithm>

,然后使用swap

接下来使用while而不是do-while。插入排序并不总是每次迭代都进行交换!有时不是。

此外,如果您不想返回任何内容,请使用void

并将该参数作为引用,以便实际上对其进行更改。

您应该最终得到:

void Insertion_Sort(vector<int>& A) {
    for (int j = 1; j < A.size(); j++) {
        int i = j - 1;
        while ((i >= 0) && (A[i] > A[i + 1])) {
            swap(A[i + 1], A[i]);
            i -= 1;
        }      
    }
}

还有其他一些不错的更改,例如遵循大写和命名约定(例如insertion_sorta),但这是针对codereview.stackexchange.com的。而且您可能也不应该在每次迭代时都调用size()。干杯。