c语言,先冒泡排序,然后插入数字并使这个一维数组仍然有序(非常感谢有大佬能回答我的问题)
#include<stdio.h>
int sort(int a [])
{
int i,j,x=0;
for(i=0; i<10; i++)
{
for(j=0; j<10-i; j++)
{
if(a[j]>a[j+1])
{
x=a[j+1];
a[j+1]=a[j];
a[j]=x;
}
}
}
return a;
}
int main()
{
int a[10]= {1,5,6,7,8,9,10,2,3,4};
int b,i,j;
for(j=0; j<10; j++)
printf("%d ",a[j]);
printf(" ");
sort(a);
for(i=0; i<10; i++)
{
printf("%d ",a[i]);
}
printf("请输入要插入的数字");
scanf("%d",&b);
//我想知道为什么下面的代码没有执行//
for(i=1; i<10; i++)
{
if(a[i]>=b)
{
break;
}
}
for(j=10; j>i; j--)
{
a[j]=a[j-1];
}
a[i]=b;
for(j=0; j<11; j++)
printf("%d ",a[j]);
}
//同样的问题将代码稍微改一下却可以执行,这是为什么//
#include<stdio.h>
int sort(int a [])
{
int i,j,x=0;
for(i=0; i<10; i++)
{
for(j=0; j<10-i; j++)
{
if(a[j]>a[j+1])
{
x=a[j+1];
a[j+1]=a[j];
a[j]=x;
}
}
}
for(i=0; i<10; i++)
{
printf("%d ",a[i]);
}
return a;
}
int insert(int b,int a[])
{
int i,j;
for(i=1; i<10; i++)
{
if(a[i]>=b)
{
break;
}
}
for(j=10; j>i; j--)
{
a[j]=a[j-1];
}
a[i]=b;
for(j=0; j<11; j++)
printf("%d ",a[j]);
}
int main()
{
int a[10]= {1,5,6,7,8,9,10,2,3,4};
int b;
sort(a);
printf("请输入要插入的数字");
scanf("%d",&b);
insert(b,a);
}
二个程序都有一个明显的错
int a[10]= {1,5,6,7,8,9,10,2,3,4};
其中的变量a,只能存储10个int数,你插入了一个,要存储11个数,下标溢出了,第二个程序能运行只是运气问题(下标溢出的结果是“不可预见的”)
你改为
int a[11]= {1,5,6,7,8,9,10,2,3,4};
至少在我电脑上,第一个程序也能出正确的结果