搜索
写经验 领红包
 > 旅游

软件开发算法面试题(数组在程序设计时有什么作用)

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

软件开发算法面试题(数组在程序设计时有什么作用?)

本文简介:

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

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

挑战开始:

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鸟叔,一位喜欢写程序、钓鱼、喝茶、玩游戏的中年大叔!

本文内容由小德整理编辑!