方法一:
#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]);}}
在VS下,需将源文件的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;}
在VS下,需将源文件的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;}
如果觉得《有一个已排好序的数组 要求输入一个数后 按原来排序的规律将他插入数组中。》对你有帮助,请点赞、收藏,并留下你的观点哦!