2501_90427444 2025-05-05 19:06 采纳率: 50%
浏览 6
已结题

可以帮我看看我的插入排序(相关搜索:插入排序)


#include <iostream>
using namespace std;
int main()
{
    int a[4]={3,1,4,2};
    for(int i=1;i<4;i++)
    {
        if(a[i-1]>a[i])
        {
            int tmp=a[i];
            int j=i-1;
            while(j>=0 && tmp<a[j])
            {
                a[j+1]=a[j];
                j--;
            }
            a[j+1]=tmp;
        }
    }
    for(int i=0;i<4;i++)
    {
        cout<<a[i]<<" ";
    }
    return 0;
}

我这个插入排序多了一个if判断,问问我写的这个 插入排序对吗

  • 写回答

2条回答 默认 最新

  • 宝码香车 优质创作者: JavaScript技术领域 2025-05-05 19:07
    关注

    让【宝码香车】来帮你解答,本回答参考DeepSeek编写,并整理提供。
    如果还有疑问可以点击头像关注私信或评论。如果答案让您满意,请采纳、点赞、关注,非常感谢!

    插入排序代码分析

    您提供的代码实现了插入排序的基本逻辑,但确实存在一个可以优化的地方。下面我将分析您的代码,并给出标准实现作为对比。

    1. 您的当前实现

    #include <iostream>
    using namespace std;
    int main()
    {
        int a[4]={3,1,4,2};
        for(int i=1;i<4;i++)
        {
            if(a[i-1]>a[i])  // 这个if判断可以去掉
            {
                int tmp=a[i];
                int j=i-1;
                while(j>=0 && tmp<a[j])
                {
                    a[j+1]=a[j];
                    j--;
                }
                a[j+1]=tmp;
            }
        }
        for(int i=0;i<4;i++)
        {
            cout<<a[i]<<" ";
        }
        return 0;
    }
    

    2. 问题分析

    1. 多余的if判断if(a[i-1]>a[i])这个判断确实可以去掉,因为:

      • while循环本身已经有tmp<a[j]的条件判断
      • 即使前一个元素不大于当前元素,while循环也不会执行
      • 去掉后代码更简洁,逻辑更清晰
    2. 正确性:您的代码排序逻辑本身是正确的,能够正确完成插入排序。

    3. 优化后的标准实现

    #include <iostream>
    using namespace std;
    
    void insertionSort(int arr[], int n)
    {
        for(int i=1; i<n; i++)
        {
            int key = arr[i];
            int j = i-1;
            while(j>=0 && arr[j]>key)
            {
                arr[j+1] = arr[j];
                j--;
            }
            arr[j+1] = key;
        }
    }
    
    int main()
    {
        int a[4] = {3,1,4,2};
        insertionSort(a, 4);
        for(int i=0; i<4; i++)
        {
            cout << a[i] << " ";
        }
        return 0;
    }
    

    4. 主要改进点

    1. 移除了多余的if判断
    2. 将排序逻辑封装成函数
    3. 使用更具描述性的变量名(key代替tmp)
    4. 使代码更符合通用实现规范

    5. 输出结果

    两种实现都会输出正确结果:

    1 2 3 4
    

    总结:您的代码能够正确排序,但可以去掉那个多余的if判断使代码更简洁。插入排序的核心思想您已经正确实现了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月13日
  • 已采纳回答 5月5日
  • 创建了问题 5月5日