希望有人可以帮忙看下这为什么插入的数据没有比较大小,直接插在了第一位上
#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]);
//}修改
}
这里是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