C语言冒泡法排序,插入值后仍有序

用冒泡法对10个整数(这10个整数可随机生成,可初始化,也可以逐个从键盘读入)排序。然后输入一个数,将该数插入到数组中,使插入后的数组仍然有序。并输出插入后的数组。

 参考运行一下:

如有帮助请在我的回答上点个【采纳】,谢谢!

#include <stdio.h>
main()
{
int i,a[12],t,k,m;
printf("请输入10个数,输一个回车一次:");
for(i=0;i<11;i++)
a[i]=0;
for(i=1;i<11;i++)
scanf("%d",&a[i]);
for(k=1;k<11;k++)
for(i=k+1;i<11;i++)
while(a[i-1]>a[i])
{
t=a[i-1];
a[i-1]=a[i];
a[i]=t;
}
printf("排序过后的结果:\n");
for(i=1;i<11;i++)
printf("%d ",a[i]);
printf("\n请插入一个数:\n");
scanf("%d",&m);
printf("\n新的排序结果:\n");
for(i=1;i<11;i++)
if(a[i]>m)
break;
for(k<=11;k>i;k--)
a[k]=a[k-1];
a[i]=m;
for(i=1;i<=11;i++)
printf("%d ",a[i]);
}

定义长度为11的数组,冒泡法排序,然后搜索大于插入值的位置,将该位置之后的元素都后移一位

void sort(int a[],int n)
{
    for(int i=0;i<n-1;i++)
        for(int j=0;j<n-i-1;j++)
        {
            if(a[j] > a[j+1])
            {
                int t = a[j];
                a[j] = a[j+1]
                a[j+1] = t;
            }
        }
}

void insert(int a[],int n,int b)
{
    bool t = false;
    for(int i=0;i<n;i++)
    {
        if(b < a[i])
        {
            for(int j=n;j>i;j--)
                a[j] = a[j-1];
            a[i] = b;
            t = true;
            break;
        }
    }
    if(!t)
        a[n] = b;
}

void main()
{
    int a[11] = {39,21,43,94,29,12,3,92,23,5};
    sort(a,10);
    insert(a,10,78);
    for(int i=0;i<11;i++)
        printf("%d ",a[i]);
}

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^