引自免费微信小程序:皆我百晓生
你的代码确实实现了插入排序算法的思想,但是有一些小问题需要修正。首先,你的代码中的变量名vectorv应该是v,因为你在后面的代码中使用了v作为向量名称。其次,你的外层循环应该遍历整个向量,而不仅仅是到x - 1的位置。以下是修正后的代码:
#include <iostream>
#include <vector>
#include <algorithm> // 为了使用swap函数
void test() {
std::vector<int> v = { 50, 12, 48, 936, 2, 77, 12, 5, 1, 80 }; // 修改变量名为v
int x = v.size(); // 获取向量大小
for (int j = 1; j < x; j++) // 外层循环遍历整个向量,从第二个元素开始到最后一个元素结束
{
int temp = v[j]; // 保存当前要插入的元素
int i = j - 1; // 从前一个元素开始比较,因为当前元素已经处于正确的位置了
while (i >= 0 && v[i] > temp) // 当前一个元素小于比较的元素时停止比较并插入元素
{
v[i + 1] = v[i]; // 将大于当前元素的元素向后移动一位
i--; // 向后一位元素进行比较
}
v[i + 1] = temp; // 将当前元素插入正确的位置
}
for (int i = 0; i < x; i++) // 输出排序后的向量元素
{
std::cout << v[i] << " ";
}
std::cout << std::endl; // 输出换行符结束当前输出操作
}
现在你的代码应该能正确地对向量进行插入排序并输出结果了。请注意我在外层循环中添加了一个变量temp来保存当前要插入的元素的值,以便在找到正确的插入位置时将其插入。同时,我将外层循环修改为从第二个元素开始到最后一个元素结束,并将内层循环的条件进行了修改以正确进行比较和插入操作。