面试题目-堆排、快排、二分查找

近期在忙着找工作,由于专业跨度的原因,稍微有些焦头烂额,在方向上有些失衡。有种很奇怪的感觉,我不知道换联网公司到底需要什么样的人才,(/ □ \),好了,吐槽结束了,该继续得还得继续,工作还得继续努力找,希望自己好运吧。

上周面试了一家比较不错的互联网公司,这可能是自己离互联网公司最近的一次了,之前去面过一次爱奇艺,但是,由于对linux下的网络异步通讯这一块不熟,给很快请出来了。。。
感觉这家的氛围和环境我十分喜欢,如果有机会我就去了,不过自己在HR面试时的表现真的很糟糕 - -

排序算法

遗憾的是对于堆排序没有做准备,快排倒是因为经常画画,没有压力,回来了痛心疾首,把程序好好写一遍: 堆排序+快速排序

堆排序

堆排序的思路不再赘述了,直接贴代码吧

template <typename T>
void HeapMentains( T array[], int start, int end )
{
    int lchild = 2*start+1;
    int rchild = lchild+1;
    int large = start;
    if ( lchild <= end && array[start] < array[lchild] )
    {
        large = lchild;
    }
    if ( rchild <= end && array[large] < array[rchild] )
    {
        large = rchild;
    }
    if ( large != start )
    {
        swap( array[large], array[start] );
        HeapMentains( array, large, end );
    }
}

template <typename T>
void HeapSort( T array[], int size )
{
    int end = size - 1;
    int pos = end/2;
    for ( int i=pos; i!=-1; --i )
    {
        HeapMentains( array, i, end );
    }
    for ( int i=end; i!=0; --i )
    {
        swap( array[0], array[i] );
        HeapMentains( array, 0, i-1 );
    }
}

快速排序

template <typename T>
int partition( T array[], int start, int end )
{
    T key = array[end];
    int index = start - 1;
    while ( start != end )
    {
        if ( array[start] < key )
        {
            ++ index;
            swap( array[index], array[start] );
        }
        ++ start;
    }
    ++ index;
    swap( array[index], array[end] );
    return index;
}

template <typename T>
void QuickSort( T array[], int start, int end )
{
    if ( start < end )
    {
        int partition =  Partition( array, start, end );
        QuickSort( array, start, partition-1 );
        QuickSort( array, partition+1, end );
    }
}

二分查找

经典的查找,用递归的方式实现,不容易出错,代码如下:

template <typename T>
int BinarySearch( T array[], int start, int end, T &val )
{
    if ( start <= end )
    {
        int mid =     ( start+end )/2;
        if ( array[mid] == val )
        {
             return mid;
        }
        else if ( array[mid] < val )
        {
             return BinarySearch( array, mid+1, end, val );
        }
        else
        {
            return BinarySearch( array, start, mid-1, val );
        }         
    }
    return -1;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前Facebook工程师 打造王者级课程                            覃超 Facebook 早期员工&多年面试官、曾作为 Facebook Messenger Tech Lead,主导和参与了 Facebook App、Facebook Messenger、Facebook Phone 等产品的研发工作。 现在,覃超老师致力于计算机科学领域的培训指导,经他指导的学生,90%以上拿到了硅谷公司或国内顶级互联网公司的offer。 推动0到3岁程序员 打通职业发展路径 数据结构与算法计算机学科知识结构的核心和技术体系的基石,随着科技的飞速发展,数据结构的基础性地位反而更加坚固,是每一个程序员必须掌握的底层核心技能! 多岗位必备技能 快速提升编程内功   作为一名程序员,无论是任何岗位,掌握数据结构与算法,就可以在面试前建立自己的算法技术体系,同时有助于更好地阅读源码和设计编写一些复杂的工具,快速提升编程内功! 建立框架性知识体系 覆盖重要知识点 很多人认为可能除了面试,之后再也用不到据结构与算法了,但是如果程序员想拔高一个层次,数据结构与算法是很重要的一部分,《全解数据结构与算法》帮你完成角色的转变! 透彻讲解底层核心原理 拓展能力上限 很多人认为可能除了面试,之后再也用不到据结构与算法了,但是如果程序员想拔高一个层次,数据结构与算法是很重要的一部分,《全解数据结构与算法》帮你完成角色的转变!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值