m0_73784819 2024-07-26 14:21 采纳率: 69.2%
浏览 3
已结题

各位领导看下,我这个C++代码是不是插入排序

void test()
{
vectorv{ 50,12,48,936,2,77,12,5,1,80 };
int x = v.size();

for (int j = 1;j <= x - 1;j++)//j为无序区
{
    for (int i =0;i < j;i++)//i为有序区  假设第一位就是有序区然后以此类推去对比
    {
        if (v[j] < v[i])
        {
            swap(v[j], v[i]);
            
        }
    }
}
for (int i = 0;i <= x - 1;i++)
{

    cout << v[i] << " ";

}
cout << endl;

}

  • 写回答

1条回答 默认 最新

  • 专家-司宇[在线] 2024-07-26 14:21
    关注

    引自免费微信小程序:皆我百晓生

    你的代码确实实现了插入排序算法的思想,但是有一些小问题需要修正。首先,你的代码中的变量名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来保存当前要插入的元素的值,以便在找到正确的插入位置时将其插入。同时,我将外层循环修改为从第二个元素开始到最后一个元素结束,并将内层循环的条件进行了修改以正确进行比较和插入操作。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 8月4日
  • 已采纳回答 7月27日
  • 创建了问题 7月26日