假设我想将值插入数组,同时对其进行排序。 这是我的解决方案:
int[] arr = new int[5];
int k;
arr[0] = int.Parse(Console.ReadLine());
for (int i = 1; i < arr.Length; i++)
{
int num = int.Parse(Console.ReadLine());
for (k = i; k > 0 && num < arr[k - 1];--k) arr[k] = arr[k - 1];
arr[k] = num;
}
我知道我没有处理异常,我只是谈论代码本身。
有更好的方法吗?
答案 0 :(得分:3)
您可以使用SortedSet<>,它会在您添加项目时自动排序。
var numbers = new SortedSet<int>()
{
4,
9,
6,
3
};
foreach (var number in numbers)
{
Console.WriteLine(number);
}
答案 1 :(得分:0)
如果它不必是数组,你可以这样做:
static void Main(string[] args)
{
List<int> list = new List<int>
{
1,
2,
7,
10
};
int k = int.Parse(Console.ReadLine());
list.Add(k);
list.Sort();
}
编辑:如果你想在插入时进行排序,你可以这样做:
int k = int.Parse(Console.ReadLine());
int i = list.Where(x => x > k).Min();
int index = list.IndexOf(i);
list.Insert(index, k);
答案 2 :(得分:0)
您可以使用List
并将其转换为数组。当您始终维护列表时,可以使用列表的BinarySearch
方法获取插入索引:
const int length = 5;
List<int> result = new List<int>(length);
for (int i = 0; i < length; i++) {
int num = int.Parse(Console.ReadLine());
int insertIndex = result.BinarySearch(num);
if (insertIndex < 0) {
insertIndex = ~insertIndex;
}
result.Insert(insertIndex, num);
}
int[] arr = result.ToArray();
二进制搜索比您当前执行的线性搜索更快 。使用当前的5个值,您无法看到它。您可以通过更大的列表(hundrets或数千个值)进行defenitely看到它。