#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; //插入到正确位置
}
}
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!