C#数组问题:在有序的数组内插入任意一个值,数组仍然有序(不适用Array.sort)

问题:在有序的数组内插入一个值,数组仍然有序。

拿到这个题,该怎么想?

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);
}

因为数组无法直接输出,所以这时候就需要对数组进行遍历,通过遍历,将数组内的数据输出出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值