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

来源:互联网 发布:adc0804中文数据手册 编辑:程序博客网 时间:2024/04/29 22:13

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

上周面试了一家比较不错的互联网公司,这可能是自己离互联网公司最近的一次了,之前去面过一次爱奇艺,但是,由于对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
原创粉丝点击