方法一:
#include<stdio.h>
int main()
{
int a[11]={1,4,7,9,23,34,56,65,67,89};//定义一个包含a[0]-a[9]共10位数字的一维数组
int number,i=0,j=0,t1=0,t2=0;
scanf("%d",&number);
if(number>a[9])//如果输入的数字大于a[9]
{
a[10]=number;//把输入的数字放到a[10]
}
else
{
for(i=0;i<10;i++)
{
if(a[i]>=number)
{
t1=a[i];//t1作为中间变量,目的是把a[i]的值传给t1,再由t1传给a[10]
a[i]=number;//把要插入的数字插进该空格中,并把插入位置的数字赋值给下一个数字
number=t1;//为a[10]=number做准备
}
a[10]=number;//最终是把a[9]赋值给a[10]
}
}
for(i=0;i<11;i++)
{
printf("%d\n",a[i]);
}
}
在VS2019下,需将源文件的scanf改为scanf_s:
#include<stdio.h>
int main()
{
int a[11] = { 1,4,7,9,23,34,56,65,67,89 };//定义一个包含a[0]-a[9]共10位数字的一维数组
int number, i = 0, j = 0, t1 = 0, t2 = 0;
scanf_s("%d", &number);
if (number > a[9])//如果输入的数字大于a[9]
{
a[10] = number;//把输入的数字放到a[10]
}
else
{
for (i = 0; i < 10; i++)
{
if (a[i] >= number)
{
t1 = a[i];//t1作为中间变量,目的是把a[i]的值传给t1,再由t1传给a[10]
a[i] = number;//把要插入的数字插进该空格中,并把插入位置的数字赋值给下一个数字
number = t1;//为a[10]=number做准备
}
a[10] = number;//最终是把a[9]赋值给a[10]
}
}
for (i = 0; i < 11; i++)
{
printf("%d\n", a[i]);
}
}
方法二:
a[11]数组中的元素是从小到大排列,元素只有10个,如果输入的数比a[9]都大,直接把这个数插入到末尾,反之一一比较,找到比输入数大的第一个数a[i],并记录下标i,然后把a[i]~a[9]往后移,移完后,再把这个数插入到a[i]处,并中断循环。
#include<stdio.h>
int main()
{
int a[11]={1,4,6,9,13,16,19,28,40,100};//定义一个包含a[0]-a[9]共10位数字的一维数组
int number,i=0,j;
scanf("%d",&number);
if(number>a[9])//如果输入的数字大于a[9]
{
a[10]=number;//把输入的数字放到a[10]
}
else
{
for(i=0;i<10;i++)
{
if(a[i]>=number)
{
for(j=9;j>=i;j--)//i的前一位就是插入点
{
a[j+1]=a[j];//把i到j的j-i个元素向后移一个
}
a[i]=number;
break;
}
}
}
for(i=0;i<11;i++)
{
printf("%d\n",a[i]);
}
return 0;
}
在VS2019下,需将源文件的scanf改为scanf_s:
#include<stdio.h>
int main()
{
int a[11] = { 1,4,6,9,13,16,19,28,40,100 };//定义一个包含a[0]-a[9]共10位数字的一维数组
int number, i = 0, j;
scanf_s("%d", &number);
if (number > a[9])//如果输入的数字大于a[9]
{
a[10] = number;//把输入的数字放到a[10]
}
else
{
for (i = 0; i < 10; i++)
{
if (a[i] >= number)
{
for (j = 9; j >= i; j--)//i的前一位就是插入点
{
a[j + 1] = a[j];//把i到j的j-i个元素向后移一个
}
a[i] = number;
break;
}
}
}
for (i = 0; i < 11; i++)
{
printf("%d\n", a[i]);
}
return 0;
}