定义一个数组,输入数据并排序,然后在输入一个数后,按原来排序的规律将它插入数组中
//测试数据:1 1 2 5 3 3 4 9 7 8
仅供参考,如有更好的思想,欢迎指正
#include<stdio.h>
#define N 11
int main(){
int a[N],i,j,temp,n,k;
printf("请输入10个数为数组赋初值:");
for(i=0;i<N-1;i++){
scanf("%d",&a[i]);/*输入10个整数*/
}
printf("\n");
printf("数组中的值为:");
for(i=0;i<N-1;i++){
printf("%d ",a[i]);
}
printf("\n");
/*从小到大进行冒泡排序*/
for(i=0;i<N-1-1;i++){
for(j=0;j<N-1-1-i;j++){
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
printf("从小到大排序之后的结果为:");
for(i=0;i<N-1;i++){
printf("%d ",a[i]);
}
printf("\n请输入需要插入的数字:");
scanf("%d",&n);/*输入一个需要插入的整数*/
if(n>=a[0]&&n<a[N-2]){/*判断输入的整数是不是在最大数最小数之间*/
for(i=0;i<N-1;i++){/*进行循环把输入的数放在大于前者小于后者之间*/
if(n>=a[i]&&n<a[i+1]){/*判断输入的n的位置的条件*/
temp=a[i+1];/*把该位置初始的值存进临时变量里面*/
a[i+1]=n;
k=i;
break;
}
}
for(j=N-1;j>k+1;j--){/*找到n的位置之后,把该位置之后的数整体向后移动一位*/
a[j]=a[j-1];
}
a[k+2]=temp;/*最后空出来的位置放n位置之前的数*/
}else if(n>=a[N-2]){/*n是否是大于最大数的数*/
a[N-1]=n;/*如果是,直接放在数组最后*/
}else{
for(i=N-1;i>0;i--){/*其它情况就是n小于最小数,把所有的数整体向后移一位*/
a[i]=a[i-1];
}
a[0]=n;/*最后把n放在最开始*/
}
printf("\n插入一个数后的排序为:");
for(i=0;i<N;i++){
printf("%d ",a[i]);
}
return 0;
}