C语言:输入一个10个整数的数组,按从小到大排序输出,然后再输入一个整数,插入到序列中,也符合排序

比如 10 20 30 40 50 60 70 80 90 100 插入一个数 52
输出为10 20 30 40 50 52 60 70 80 90 100
这个我会写,就是感觉我写的啰嗦,能简化么?
#include "stdio.h"
main()
{
int i,j,t,a[10],b[11];
for (i=0;i<10;i++)
scanf("%d",&a[i]);
for (i=0;i<9;i++)
for (j=0;j<9-i;j++)
if (a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
for (i=0;i<10;i++)
printf("%-4d",a[i]);
printf("\n输入一个数,加入到排序中:");
scanf("%d",&b[0]);
for (i=0;i<10;i++)
b[i+1]=a[i];
for (i=0;i<10;i++)
if (b[i]>b[i+1])
{
t=b[i];
b[i]=b[i+1];
b[i+1]=t;
}
for (i=0;i<11;i++)
printf("%-4d",b[i]);
printf("\n");
}#include "stdio.h"
main()
{
int i;
char c[10];
scanf("%s",c);
for (i=0;i<9;i++)
printf("%c",c[9-i]);
printf("\n");
}
不要用指针,只能用for、while、数组、switch!!!!求个简化的程序
我好像复制多了,后面加了一个逆序输出字符串的代码再来一回:
#include "stdio.h"
main()
{
int i,j,t,a[10],b[11];
for (i=0;i<10;i++)
scanf("%d",&a[i]);
for (i=0;i<9;i++)
for (j=0;j<9-i;j++)
if (a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
for (i=0;i<10;i++)
printf("%-4d",a[i]);
printf("\n输入一个数,加入到排序中:");
scanf("%d",&b[0]);
for (i=0;i<10;i++)
b[i+1]=a[i];
for (i=0;i<10;i++)
if (b[i]>b[i+1])
{
t=b[i];
b[i]=b[i+1];
b[i+1]=t;
}
for (i=0;i<11;i++)
printf("%-4d",b[i]);
printf("\n");
}

实在觉得繁琐,你的程序有2个地方可以改进
1,排序的时候不用冒泡算法,取用其它的排序算法
2,插入的时候可以用二分插入法,比你上面的算法效率高多了追问

哪个排序算法最简单?
二分插入法我去百度查查,不明白

追答

冒泡最简单,可是效率基本上最低,其它的都比这个要难点,

二分插入:先用二分查找方法找到比他大的数(要插入的数就插在他前面)
然后,先向后移动数据
最后插入数据

注意二分插入法的前提是数据里面的数据必须有序,不然无法成功

追问

神一样的解释,我明白了,我靠,还有这种插法?学无止境啊!

温馨提示:答案为网友推荐,仅供参考