技术面试常被用来作为手写代码的考题汇总

来源:互联网 发布:淘宝和天猫哪个好 编辑:程序博客网 时间:2024/05/19 09:11

考题1:二分查找(递归与非递归)

递归方法

int BinSearch(int Array[],int low,int high,int key/*要找的值*/)    {        if (low<=high)        {            int mid = (low+high)/2;            if(key == Array[mid])                return mid;            else if(key<Array[mid])                return BinSearch(Array,low,mid-1,key);            else if(key>Array[mid])                return BinSearch(Array,mid+1,high,key);        }        else            return -1;    }  

非递归方法

int BinSearch(int Array[],int SizeOfArray,int key)        {            int low=0,high=SizeOfArray-1;            int mid;            while (low<=high)            {                mid = (low+high)/2;                if(key==Array[mid])                    return mid;                if(key<Array[mid])                    high=mid-1;                if(key>Array[mid])                    low=mid+1;            }            return -1;    }    

考题2:快速排序

快速排序其实有了对线性表的分割算法后,快速排序的算法就很简单了。

#include <stdlib.h>  #include <iostream>  #include "bub.h"    using namespace std;  /* 对线性表或字表进行实际分割时,可以按如下步骤进行: 首先,在表的第一个、中间一个与最后一个元素中选取中项,设为P(k),并将P(k)赋给T,再将表中的第一个元素移到p(k)的位置上。 然后设置两个指针i和j分别指向表的起始与最后的位置。反复作以下两步: (1)将j逐渐减小,并逐次比较p(j)与T,直到发现一个p(i)<T为止,将p(j)移动到p(i)的位置上。 (2)将i逐渐增大,并逐次比较p(i)与T,直到发现一个p(i)>T为止,将p(i)移动到p(j)的位置上。 上述两个操作交替进行,直到指针i与j指向同一个位置(即i=j)为止,此时将T移到p(i)的位置上 */  template <class T>  void qck(T p[], int n){        int m, i;      T *s;      if (n > 10) //子表长度大于10,用快速排序      {          i = split(p, n); //对表进行分割          qck(p, i); //对前面的子表进行快速排序          s = p + (i + 1);          m = n - (i + 1);          qck(s, m); //对后面的子表进行快速排序      }      else      {          bub(p, n);      }      return;  }    //表的分割  template<class T>  static int split(T p[], int n){        int i, j, k, l;      T t;      i = 0;      j = n - 1;      k = (i + j) / 2;      if ((p[i] >= p[j]) && (p[j] >= p[k])) l = j;      else if ((p[i] >= p[k]) && (p[k] >= p[j]))l = k;      else l = i;        t = p[l]; //选取一个元素为T      p[l] = p[i];      while (i != j)      {          while ((i < j) && p[j] >= t) //逐渐减小j,直到发现p[j]<t              j = j - 1;          if (i < j)          {              p[i] = p[j];              i = i + 1;              while ((i < j) && (p[i] <= t)) //逐渐增大i,直到发现p[i]>t                  i = i + 1;              if (i < j)              {                  p[j] = p[i]; j = j - 1;              }          }      }      p[i] = t;      return i;  }

考题3:链表反转

考题4:实现atoi()函数


Reference:

http://blog.csdn.net/q3498233/article/details/4419285

http://blog.csdn.net/davebobo/article/details/51170177

http://blog.csdn.net/morewindows/article/details/6684558

blog.csdn.net/davebobo/article/details/64121842






0 0
原创粉丝点击