嵌入式工程师面试中常出现的算法

发布时间:2016-10-22 00:00:00 编辑:嘉辉 手机版

  嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。下面YJBYS小编为大家整理了关于嵌入式工程师面试中经常出现的算法文章,希望对你有所帮助。

  二分查找的代码.

  int bfind(int* a,int len,int val)

  {

  int m = len/2;

  int l = 0;

  int r = len;

  while(l!=m && r!= m)

  {

  if(a[m] > val)

  {

  r = m;

  m = (m+l)/2;

  }

  else if(a[m] < val)

  {

  l = m;

  m = (m+r)/2;

  }

  else

  return m;

  }

  return -1; //没有找到

  }

  写出在母串中查找子串出现次数的代码.

  int count1(char* str,char* s)

  {

  char* s1;

  char* s2;

  int count = 0;

  while(*str!='\0')

  {

  s1 = str;

  s2 = s;

  while(*s2 == *s1&&(*s2!='\0')&&(*s1!='0'))

  {

  s2++;

  s1++;

  }

  if(*s2 == '\0')

  count++;

  str++;

  }

  return count;

  }

  查找第一个匹配子串位置,如果返回的是s1长度len1表示没有找到

  size_t find(char* s1,char* s2)

  {

  size_t i=0;

  size_t len1 = strlen(s1)

  size_t len2 = strlen(s2);

  if(len1-len2<0) return len1;

  for(;i {

  size_t m = i;

  for(size_t j=0;j {

  if(s1[m]!=s2[j])

  break;

  m++;

  }

  if(j==len)

  break;

  }

  return i }

  写出快速排序或者某种排序算法代码

  快速排序:

  int partition(int* a,int l,int r)

  {

  int i=l-1,j=r,v=a[r];

  while(1)

  {

  while(a[++i] while(a[--j]>v) if(j<=i) break;

  if(i>=j)

  break;

  swap(a[i],a[j]);

  }

  swap(a[i],a[r]);

  return i;

  }

  void qsort(int* a,int l,int r)

  {

  if(l>=r) return;

  int i = partition(a,l,r);

  qsort(a,l,i-1);

  qsort(a,i+1,r);

  }

  冒泡排序:

  void buble(int *a,int n)

  {

  for(int i=0;i {

  for(int j=1;j {

  if(a[j] {

  int temp=a[j];

  a[j] = a[j-1];

  a[j-1] = temp;

  }

  }

  }

  }

  插入排序:

  void insertsort(int* a,int n)

  {

  int key;

  for(int j=1;j {

  key = a[j];

  for(int i=j-1;i>=0&&a[i]>key;i--)

  {

  a[i+1] = a[i];

  }

  a[i+1] = key;

  }

  }

  出现次数相当频繁

  实现strcmp函数

  int strcmp11(char* l,char* r)

  {

  assert(l!=0&&r!=0);

  while(*l == *r &&*l != '\0') l++,r++;

  if(*l > *r)

  return 1;

  else if(*l == *r)

  return 0;

  return -1;

  }

  实现字符串翻转

  void reserve(char* str)

  {

  assert(str != NULL);

  char * p1 = str;

  char * p2 = str-1;

  while(*++p2); //一般要求不能使用strlen

  p2 -= 1;

  while(p1 {

  char c = *p1;

  *p1++ = *p2;

  *p2-- = c;

  }

  }

下页更精彩: 1 2 下一页 尾页
本文已影响866
+1
0