云计算、AI、云原生、大数据等一站式技术学习平台

网站首页 > 教程文章 正文

软件开发工程师笔试题系列之数组篇

jxf315 2025-06-12 13:40:05 教程文章 2 ℃

本文简介:

数组不仅仅是在编程学习过程中的一个难点,也是毕业生初入职场,在笔试过程中容易阵亡的“重灾区”。

鸟叔整理了一些在企业招聘过程中,有关于数组的高频笔试题,并附有答案与解析!

挑战开始:

1.已知数组:int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 使用折半查找算法,输入数值,获取数值对应的索引。

int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
//获取数值2对应的索引信息
Console.WriteLine(HalfFind(array, 2));

//折半查找方法
public static int HalfFind(int[] array,int findNumber) 
 {
     int lowIndex = 0;
     int highIndex = array.Length - 1;
     int midIndex;

      while (lowIndex<= highIndex) 
      {
          midIndex = (lowIndex + highIndex) / 2;
          if (array[midIndex] == findNumber)
          {
               return midIndex;
          }
          else if (array[midIndex] < findNumber)
          {
               lowIndex = midIndex + 1;
          } else 
          {
                highIndex = midIndex - 1;
           }
       }
            return -1;
}

题目解析:

使用折半查找(二分法),注意事项:仅适用于对已有顺序的数组、数据进行操作!!!

折半查找算法步骤:

  • 设定查找范围的下限low,上限high,由此确定查找范围的中间位置mid;
  • 中间位置的值等于待查的值,查找成功。中间位置的值小于待查的值,则low=mid+1。中间位置的值大于待查的值,则high=mid-1。
  • 直到low>high,查找失败。

2.将数组 int[] array = { 8, 4, 20, 98, 28, 1 }; 按正序排列(选择排序算法)。

int[] array = { 8, 4, 20, 98, 28, 1 };
int temp;
for (int i = 0; i < array.Length - 1; i++)
{
   for (int j = i + 1; j < array.Length; j++)
   {
      if (array[i] > array[j])
      {
          temp = array[i];
          array[i] = array[j];
          array[j] = temp;
       }
   }
}
for (int i = 0; i < array.Length; i++)
{
    Console.WriteLine(#34;array[{i}]={array[i]}");
}

题目解析:

选择排序的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。


3.将数组 int[] array = { 5, 4, 3, 2, 1 }; 按正序排列(冒泡排序算法)。

int[] array = { 5, 4, 3, 2, 1 };
int temp;

for (int i = 0; i < array.Length - 1; i++)
{
  for (int j = array.Length - 1; j > i; j--)
  {
     if (array[j] < array[j - 1])
     {
        temp = array[j];
        array[j] = array[j - 1];
        array[j - 1] = temp;
      }
   }
}
for (int i = 0; i < array.Length; i++)
{
   Console.WriteLine(#34;array[{i}]={array[i]}");
}

题目解析:

冒泡排序工作原理:重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换。


4.随机生成1-100不重复的数组,随机数范围为1-100。

//定义长度为100的数组
int[] intArray = new int[100];
//定义随机数对象,用于生成随机数
Random rd = new Random();
//标志位 用于判重
bool flag = false;
//索引计数器
int count = 0;
while (true)
{
   //随机生成1-100范围的数值
   int number = rd.Next(1, 101);
   for (int i = 0; i < intArray.Length; i++)
   {
      if (intArray[i] == number)
      {
         flag = true;
          break;
       }
    }
    if (flag)
    {
       flag = false;
       continue;
     }
     else
     {
        intArray[count] = number;
      }
      //当数组的最后一位值不为默认的0,证明赋值过程结束
      if (intArray[intArray.Length - 1] != 0)
      {
        break;
      }
        count++;
}
    //排序数组
    Array.Sort(intArray);
    //打印最终的结果
    foreach (int i in intArray)
    {
      Console.WriteLine(i);
    }

5.将下列数组 int[] array = {1,2,3,4,5}; 实现反转操作。

int[] array = { 1, 2, 3, 4, 5 };
//临时变量,存放数组互换值
int temp = 0;
//以数组中间为轴,数组俩边元素进行互换
for (int i = 0; i < array.Length / 2; i++)
{
     temp = array[i];
     array[i] = array[array.Length - i - 1];
     array[array.Length - i - 1] = temp;
}
//输出结果
foreach (int i in array)
{
     Console.WriteLine(i);
}

题目解析:


6. 在一个未排序的整型数组中,如何找到最大和最小的数字。

int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
//定义最大值、最小值
int max, min;
//假设最大值与最小值,为数组的第一项
max = min = array[0];
//从数组第二项开始迭代,进行循环比较
for (int i = 1; i < array.Length; i++)
{
   if (max < array[i])
   {
      max = array[i];
   }
   if (min > array[i])
   {
      min = array[i];
   }
}
Console.WriteLine(#34;max={max},min={min}");

7.查找并输出,下列数组 int[] array = {1,2,2,2,3,3,4,5,6,6,7}; 中的 重复元素。

int[] array = {1,2,2,2,3,3,4,5,6,6,7};
//定义计数器
int count = 0;
//循环迭代每一项,统计重复数量
for (int i=0;i<array.Length;i++) 
{
   for (int j=i+1;j<array.Length;j++) 
   {
      if (array[i] == array[j]) 
      {
          count++;
      }
   }
//count=1 判断最后一次重复,避免反复输出重复元素!
   if (count == 1)
   {
      Console.WriteLine("重复元素 : " + array[i]);
   }
   count = 0;

}

8.已知数组:int[] array = {1,2,3,4,0}; 0代表空位,输入插入位置以及插入值,实现数组的插入操作。

//定义数组长度为5,0位代表剩余的空位置
int[] array = {1,2,3,4,0};
//定义插入的索引位置
int index = 0;
//定义插入的值
int number = 666;
//将插入位置以后的内容,包含插入位置,向后移动,腾出位置
for (int i= array.Length-1; i>index;i--) 
{
   array[i] = array[i-1];
}
//将想插入的值,插入到索引位置
array[index] = number;
//遍历输出结果
foreach (int i in array)
{
    Console.WriteLine(i);
}

9.已知数组:int[] array = {1,2,3,4,5}; 输入要删除的元素下标,实现数组项删除操作,例如:输入下标2,结果int[] array = {1,2,4,5,0};

int[] array = {1,2,3,4,5};
//需要删除元素的坐标为2
int index = 2;
//从删除坐标开始,先前进位
for (int i=index;i<array.Length-1;i++) 
{
    array[i] = array[i+1];
}
//将数组最后一位的值,设置为0,表示空位
array[array.Length - 1] = 0;

10.将数组:int[] array = {1,2,2,2,3,3,4,5,6,6,7}; 中的重复项移除。

int[] array = {1,2,2,2,3,3,4,5,6,6,7};
//根据原始数组长度,生成临时数组容器,存放不重复值
int[] tempArray = new int[array.Length];
//定义索引计数器
int index = 0;
//定义标志位
bool flag = false;
//循环迭代每一项,统计重复数量
for (int i=0;i<array.Length;i++) 
{
   int number = array[i];
   for (int j=i+1;j<array.Length;j++) 
   {
     if (number == array[j]) 
     {
        flag = true;
     }
   }
   if (flag)
   {
      flag = false;
      continue;
   }
   else 
   {
      tempArray[index++] = array[i];
   }
}
//输出结果
foreach (int i in tempArray) 
{
   Console.WriteLine(i);
}

喜欢的小伙伴可以关注我,一起交流学习!我是IT鸟叔,一位喜欢写程序、钓鱼、喝茶、玩游戏的中年大叔!

最近发表
标签列表