我用C写了一个插入算法,但是最终输出结果是没有排列完整,可以告诉我问题出在哪里了吗


#include <stdio.h>
void insert(int a[],int n);
int main()
{
    int nus[5]={5,9,7,2,4};
    insert(nus,5);
    //遍历输出数组
    for(int k=0;k<5;k++)
    {
        printf("%d\t",nus[k]);
    }
    system("pause");
}

//插入函数
void insert(int a[],int n)
{
    int pos,i,temp;
    for (i=1;i<=n;i++)
    {
        if(a[i]<a[i-1])
        {
            temp=a[i];
            pos=i-1;
            while (pos>0 && temp<a[pos])
            {
                a[pos+1]=a[pos];
                pos--;
            }
            a[pos+1]=temp;
        }
    }
}

可以告诉我这个插入排序算法问题出在哪里吗

for循环中,i<=n改成i<n,等于n的时候数组越界
while循环中pos>0改成pos>-1
代码修改如下:

#include <stdio.h>
#include <stdlib.h>


void insert(int a[],int n);
int main()
{
    int nus[5]={5,9,7,2,4};
    insert(nus,5);
    //遍历输出数组
    for(int k=0;k<5;k++)
    {
        printf("%d\t",nus[k]);
    }
    system("pause");
}

//插入函数

void insert(int a[], int n)
{
    int pos,i,temp;
    for(i= 1; i<n; i++)
    {
        if(a[i] < a[i-1])
        {//若第 i 个元素大于 i-1 元素则直接插入;反之,需要找到适当的插入位置后在插入。
            pos= i-1;
            temp = a[i];
            while(pos>-1 && temp < a[pos])
            {  //采用顺序查找方式找到插入的位置,在查找的同时,将数组中的元素进行后移操作,给插入元素腾出空间
                a[pos+1] = a[pos];
                pos--;
            }
            a[pos+1] = temp;      //插入到正确位置
        }
        
    }
}


插入排序可以看看下面的文章:

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632