问题:在有序的数组内插入一个值,数组仍然有序。
拿到这个题,该怎么想?
1.数组的长度是不能被改变的,是定值,倘若想改变数组的长度,那么只能通过创建新的数组来解决。
2.如何插入一个数?首先从键盘输入一个数,然后再拿这个数,和数组内每一个数进行比较。
3.比较方法,判断从键盘输入的这个数,是否在数组相邻的两个数之间。
4.知道从键盘输入的这个数插在哪个位置以后,需要通过下标来进行插入。
5.如何输出?1.首先输出从键盘输入的这个数之前的数,通过原数组赋值给新数组。2.再将从键盘输入的这个数,赋值给新数组已有之后的下标,3.最后再把原数组剩余的数据赋值给新数组。
6.最后,数组通过遍历输出,查看是否符合标准
重要提醒!如果输入的数是最小值,需要给输入的数下标为0
接下来看代码,分段进行解析:
string str=Console.ReadLine();
string[] str1 = str.Split(" ");
int[] arry= new int[str1.Length];
for(int i = 0; i < arry.Length; i++)
{
arry[i]=Convert.ToInt32(str1[i]);
}
int a=Convert.ToInt32(Console.ReadLine());
int m = arry.Length-1;
for(int i = 0;i < arry.Length-1;i++)
{
if (a >= arry[i] && a <= arry[i + 1])
{
m = i; break;
}
}
if (a < arry[0])
{
m = -1;
}
int[] arry1 = new int[arry.Length + 1];
for(int i = 0; i < m+1; i++)
{
arry1[i] = arry[i];
}
arry1[m + 1] = a;
for(int i = m + 2; i < arry1.Length; i++)
{
arry1[i] = arry[i - 1];
}
foreach(int item in arry1)
{
Console.WriteLine(item);
}
1. 首先看第一段:
string str=Console.ReadLine();
string[] str1 = str.Split(" ");
int[] arry= new int[str1.Length];
for(int i = 0; i < arry.Length; i++)
{
arry[i]=Convert.ToInt32(str1[i]);
}
这段代码的作用是,输入一串字符串和空格,然后通过空格来分割字符串,分割以后,创建一个int类型的数组,通过转换,把字符串转化成int类型,在存放到arry的数组内。
2.第二段代码
int a=Convert.ToInt32(Console.ReadLine());
int m = arry.Length-1;
这段代码第一句的作用是,从键盘上输入一个数,这个数就是要添加到数组内的数。
第二句的作用是,创建一个索引,因为数组是通过索引来完成操作的,而这个索引的值,是数组索引的最大长度,如果索引超了,则数组无法完成,如果索引过小,则无法完成最大数的插入。
3.第三段代码
for(int i = 0;i < arry.Length-1;i++)
{
if (a >= arry[i] && a <= arry[i + 1])
{
m = i; break;
}
}
这段代码的作用就是,拿从键盘输入的这个数,和数组的相邻两个数进行比较,看是否在此之间,如果在的话,则就是插入的位置,把索引赋值给m。
4.第四段代码
if (a < arry[0])
{
m = -1;
}
这段代码的作用就是,如果插入的数是最小的数,则这个数的索引就是0,赋值为-1,请看接下来的代码。
5.第五段代码
int[] arry1 = new int[arry.Length + 1];
for(int i = 0; i < m+1; i++)
{
arry1[i] = arry[i];
}
这段代码的作用,第一句就是创建一个新的数组,数组的长度是原数组的长度+1;而for循环就是把从键盘输入的这个数,之前的数组的数据,从原数组赋值给新的数组。
6.第六段代码
arry1[m + 1] = a;
for(int i = m + 2; i < arry1.Length; i++)
{
arry1[i] = arry[i - 1];
}
首先看第一句,第一句就是把从键盘输入的这个数,放到新数组下标的位置,也就是新数组已有数据的后边,则是需要插入的数;第二句for循环则是把原数组的剩下数据存放到新的数组新的位置里。
7.第七段代码
foreach(int item in arry1)
{
Console.WriteLine(item);
}
因为数组无法直接输出,所以这时候就需要对数组进行遍历,通过遍历,将数组内的数据输出出来。