软件开发面试题目总结

追了几天剧,还是要来总结一下面试的一些题目,方便自己,也希望对大家都有用。

        面试时,总会遇到写出类似strcpy的原函数之类的,因为自己的懒惰,就曾经被一个面试官骂了,说要对得起中大软件工程这个学校以及专业。实话实说,觉得自己在学院里还是挺渣的,好吧,盲羊补牢吧。

                                                             一、原函数类

1、strcpy的原函数实现:

char *my_strcpy(char *str,const char *dest_str)		strcpy原函数 
{
	assert((str!=NULL) && (dest_str!=NULL));		//定义不为空 
	char *temp = str;
	while((*temp++ = *dest_str++)!='\0');		//复制地址的指向 
	return str; 
}

注意判断传入的字符指针是否为空,加强代码的健壮性,返回值是指向要得到的str字符串的第一个字符指针。


2、strlen的原函数实现

int my_strlen(const char *str)	//计算字符串长度原函数 
{
	assert(str != NULL);	//注意定义不为空 
	int len = 0;
	while((*str++)!='\0')
		++len; 
		
	return len;
} 
传入的是字符串首字符的指针,同样要判断指针是否为空,,返回值是一个int 的常数。


                                                                       二、排序实现

1、快排实现

void my_sort(int *array,const int m,const int n)	//sort快排原函数 
{
	if( m>= n || NULL == array)		//判断是否要进行排序,是空或者是不符合就不排序 
		return;
	int key = array[m];		//哨兵元素 
//	cout<<"key   "<<key<<endl;
	int i = m,j=n;
	while(i < j)
	{
		while(array[j]>=key && j>i)		//算法思想,记录哨兵元素,找出比哨兵元素大的,放在其位置上,再从前面找出比其大的,放在后面刚刚放在前面的位置 
			--j;
//		cout<<"array[j]  "<<j<<" "<<array[j]<<endl;
		array[i] = array[j];		
		
		while(array[i]<=key && i<j)	
			++i;
//		cout<<"array[i]  "<<array[i]<<endl;
		array[j] = array[i];
	}
	array[i] = key;		
	my_sort(array,m,i-1);
	my_sort(array,i+1,n);
}
我的算法是以第一个为哨兵元素,从后面找出比哨兵元素小的,就放在哨兵元素的位置;再从前面找出比哨兵元素大的元素,放在刚刚移动的位置  J 上,知道i = j ,此时 i位置上就放置哨兵元素,这样子,哨兵元素前面的不大于哨兵元素key的值,后面的不小于key的值,达到排序效果。


                                                                             三、其他实现

1、二叉查找的实现

int my_binary_search(int *array,const int n,int key)	//二叉查找 
{
	assert(array != NULL);
	int low = 0,high=n-1;
	int mid;
	while(low <= high)
	{
		mid = (low+high)/2;
		if(key == array[mid])
			return mid;
		else if(key < array[mid])
			high = mid - 1;
		else 
			low = mid +1;
	}
	return false;	
} 
这个实现就很简单了,传入数组首个元素的指针,数组长度以及要查找的元素,找得到就返回该元素的位置,找不到就返回FALSE。


后面有时间再继续更新,如有错误,欢迎指正~


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值