查找包括顺序查找、二分查找、哈希表查找和二叉排序树查找。如果要求是在排序数组(或部分排序数组)中查找一个数字或者统计某个数字出现的次数,可以采用二分查找。
哈希表优点是时间复杂度为O(1),是效率最高的查找方式。缺点是需要额外的空间来实现哈希表。
排序比查找复杂,包括比较插入排序、冒泡排序、归并排序、、快速排序面试要求能够从额外空间消耗、平均时间复杂度和最差时间复杂度等方面比较他们的优缺点。快速排序是考察的重点。
经典面试题
对公司所有员工年龄排序,允许使用辅助空间。代码如下:
void SortAges(int ages[],int length)
{ if(ages==nullptr || length<=0)
return;
int timesOfAge[oldestAge+1];
for(int i=0;i<=oldestAge;++i)
timesOfAge[i]=0;
for(int i=0;i<length;++i)
{
int age=ages[i];
if(age<0 || age>oldestAge)
return 0;
++timesOfAge[age];
}
int index=0;
for(int i=0;i<=oldestAge;++i)
{
for(int j=0;j<timesOfAge[i];++j)
{
ages[index]=i;
++index;
}
}
}
数组timesOfAge用来统计每个年龄出现的次数。某个年龄出现多少次,就在数组ages里设置几次该年龄,相当于给数组ages排序了。算法的时间效率为O(n)