向一组已经排好序的数组中插入一个整数,使得数列仍然有序

希望有人可以帮忙看下这为什么插入的数据没有比较大小,直接插在了第一位上
#include <stdio.h>
void main()
{
int i,j,k,x,t,flag=0;
int a[10]= {1,3,5,12,34,45,56,67,78,89};
printf("输入一个数字:");
scanf("%d",&x);
for(i=0; i<10; i++)
{
if(x<a[i])
{ flag=1;
break;
}
if(flag==0)
{
k=a[i];
a[i]=x;
for(j=i+1; j<11; j++)
{
t=a[j];
a[j]=k;
k=t;
}

    }

    for(i=0; i<11; i++)
        printf("%d\t",a[i]);
}

}

修改处见注释,供参考:

#include <stdio.h>
void main()
{
    int i, j, k, x, t, flag = 0;
    int a[11] = { 1,3,5,12,34,45,56,67,78,89 }; //a[10] 修改
    printf("输入一个数字:");
    scanf("%d", &x);
    for (i = 0; i < 10; i++)
    {
        if (x < a[i])
        {
            flag = 1;
            //break;    //修改
        }
        if (flag == 1)  //if (flag == 0)
        {
            k = a[i];
            a[i] = x;
            for (j = i + 1; j <= 10; j++)  //for(j = i + 1; j < 11; j++)
            {
                t = a[j];
                a[j] = k;
                k = t;
            }
            break;    //修改
        }
    } //} 移动到这
    if (flag == 0)    //修改
        a[10] = x;    //修改
    for (i = 0; i < 11; i++)
        printf("%4d", a[i]);
    //}修改
}

img

这里是i,不是1

if(x<a[i])
{ flag=i;
break;
}

以下是一个C#实现的算法,算法应该可以考虑:

using System;

namespace LinqTutorial
{
    public class MyProgram
    {
        static void Main(string[] args)
        {
            var arr = new[] { 1, 3, 5, 12, 34, 45, 56, 67, 78, 89 };
            var index = -1;
            Console.WriteLine("输入一个数字:");
            // 用户输入
            int.TryParse(Console.ReadLine(), out var input);
            // 找到要插入的索引位置
            for (var i = 0; i < arr.Length; i++)
            {
                if (input > arr[i]) continue;
                index = i;
                break;
            }
            // 新建一个比原数组长度+1新数组
            var newArr = new int[arr.Length + 1];
            for (var i = 0; i < newArr.Length; i++)
            {
                // 如果新数组索引比要插入位置小,则直接将原数组的值放入新数组相应的位置
                if (i < index)
                {
                    newArr[i] = arr[i];
                }
                // 新元素的位置
                else if (i == index)
                {
                    newArr[i] = input;
                }
                else
                {
                    // 剩下的原数组的元素
                    newArr[i] = arr[i - 1];
                }
            }
            // 输出插入新数组结果
            Console.WriteLine(string.Join(",", newArr));
            Console.Read();
        }
    }
}

运行结果:

输入一个数字:
20
1,3,5,12,20,34,45,56,67,78,89