C#有序数组中插入数据操作示例(InsertData.cs):已知长度为N的一维数组A 已经按照升子排好顺序,在这个有序数组随机插入一个数,使得数组A仍然有序
你要求数组,俺们用数组做,不用List。嘿嘿i,这种考试题目鬼知道他到底是想考array还是想考list
int[] source = { 1, 2, 4 };
int a = 3;
int[] target =new int[source.Length+1];
int i = 0;
for (;i < source.Length; i++)
{
if (source[i] < a)
target[i] = source[i];
else
break;
}
target[i] = a;
for (; i <source.Length; i++)
{
target[i + 1] = source[i];
}
Console.WriteLine(string.Join(',',target));
int[] arr = {1,5,7,9,11,20};
int i = 15;
arr = arr.Concat(new int[] { i }).OrderBy(x => x).ToArray();
首先,我们可以使用二分查找的思路来找到插入位置。具体实现如下:
public static void InsertData(int[] A, int n, int data)
{
int left = 0;
int right = n - 1;
int mid = 0;
while (left <= right)
{
mid = (left + right) / 2;
if (data < A[mid])
{
right = mid - 1;
}
else
{
left = mid + 1;
}
}
// 将插入位置及其后面的元素依次后移一位
for (int i = n - 1; i >= left; i--)
{
A[i + 1] = A[i];
}
// 插入数据
A[left] = data;
}
使用方法:
int[] A = new int[] { 1, 3, 5, 7, 9 };
int n = 5;
int data = 4;
InsertData(A, n, data);
经过上述操作后,A 数组变为 { 1, 3, 4, 5, 7, 9 },仍然有序。