我正在用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);
}
我感觉我用向量处理了函数错误,而且我不理解它给我的错误,因为我将向量创建为相同类型
答案 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_sort
和a
),但这是针对codereview.stackexchange.com的。而且您可能也不应该在每次迭代时都调用size()
。干杯。