网站首页 > 教程文章 正文
本文简介:
数组不仅仅是在编程学习过程中的一个难点,也是毕业生初入职场,在笔试过程中容易阵亡的“重灾区”。
鸟叔整理了一些在企业招聘过程中,有关于数组的高频笔试题,并附有答案与解析!
挑战开始:
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鸟叔,一位喜欢写程序、钓鱼、喝茶、玩游戏的中年大叔!
猜你喜欢
- 2025-06-12 二十、Java数组(java实现数组)
- 2025-06-12 十大经典排序算法-堆排序,计数排序,桶排序,基数排序
- 2025-06-12 3分钟短文 | PHP 根据值移除数组元素,哪个方法最简单?
- 2025-06-12 JAVA程序员常用的几个工具类(java程序员主要工作内容)
- 2025-06-12 C# 基础知识系列- 3 集合数组(c#集合排序)
- 2025-06-12 JUnit5学习之三:Assertions类(junit5 assert)
- 2025-06-12 打工人私藏的4个Excel函数秘籍,效率提升3.7%
- 2025-06-12 稀疏数组——前端电子表格中的应用实战
- 2025-06-12 最快清除数组空值?分享 1 段优质 JS 代码片段!
- 2025-06-12 excel这个复杂数组公式怎么读?(excel数组公式怎么复制)
- 最近发表
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- mybatis plus page (35)
- vue @scroll (38)
- 堆栈区别 (33)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)
- redis aof rdb 区别 (33)
- 302跳转 (33)
- http method (35)
- js array splice (33)