输入n个数,已经按照从小到大顺序排好,现在另外给一个整数,请将该数查到序列中,并使新的序列任然有序。用csharp写
时间: 2023-05-20 11:02:34 浏览: 111
将一个整数S随机拆分为N个在min~max之间的整数.txt
可以使用二分查找算法来实现该功能,具体代码如下:
```csharp
using System;
class Program
{
static void Main(string[] args)
{
int[] nums = { 1, 3, 5, 7, 9 };
int n = 4;
int index = BinarySearch(nums, n);
if (index < 0)
{
index = ~index;
}
int[] newNums = new int[nums.Length + 1];
Array.Copy(nums, 0, newNums, 0, index);
newNums[index] = n;
Array.Copy(nums, index, newNums, index + 1, nums.Length - index);
Console.WriteLine(string.Join(", ", newNums));
}
static int BinarySearch(int[] nums, int n)
{
int left = 0;
int right = nums.Length - 1;
while (left <= right)
{
int mid = (left + right) / 2;
if (nums[mid] == n)
{
return mid;
}
else if (nums[mid] < n)
{
left = mid + 1;
}
else
{
right = mid - 1;
}
}
return ~left;
}
}
```
该程序首先定义了一个已经排好序的整数数组 nums 和一个需要插入的整数 n。然后使用二分查找算法找到 n 在 nums 中应该插入的位置,并将其插入到新的数组 newNums 中,最后输出 newNums 数组即可。
注意,该程序中使用了 Array.Copy 方法来复制数组,这是一种高效的数组复制方法。同时,如果二分查找算法无法找到 n 在 nums 中的位置,它会返回一个负数,这时需要使用 ~ 运算符将其转换为插入位置的索引。
阅读全文