软件开发算法面试题(数组在程序设计时有什么作用)
导语:软件开发工程师笔试题系列之数组篇
本文简介:
数组不仅仅是在编程学习过程中的一个难点,也是毕业生初入职场,在笔试过程中容易阵亡的“重灾区”。
鸟叔整理了一些在企业招聘过程中,有关于数组的高频笔试题,并附有答案与解析!
挑战开始:
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;);}
题目解析:
选择排序的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。
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;);}
题目解析:
冒泡排序工作原理:重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换。
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;);
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};//需要删除元素的坐标为2int 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鸟叔,一位喜欢写程序、钓鱼、喝茶、玩游戏的中年大叔!
本文内容由小德整理编辑!