查找和排序

查找包括顺序查找、二分查找、哈希表查找和二叉排序树查找。如果要求是在排序数组(或部分排序数组)中查找一个数字或者统计某个数字出现的次数,可以采用二分查找。
哈希表优点是时间复杂度为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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值