近期在忙着找工作,由于专业跨度的原因,稍微有些焦头烂额,在方向上有些失衡。有种很奇怪的感觉,我不知道换联网公司到底需要什么样的人才,(/ □ \),好了,吐槽结束了,该继续得还得继续,工作还得继续努力找,希望自己好运吧。
上周面试了一家比较不错的互联网公司,这可能是自己离互联网公司最近的一次了,之前去面过一次爱奇艺,但是,由于对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;
}