常见的面试算法

再去一些大公司面试时,总喜欢去先考一些基础的算法,不多说了,直接上代码几个比较基础的算法代码:

//冒泡排序(相邻交换,除了最后一个)

voidmaopaoSort(){

intnum[6];

printf("请输入6个数:");

for(inti =0; i<6; i++) {scanf("%d",&num[i]);}

for(inti =0; i <6; i++) {

for(intj = i; j <5; j++) {if(num[i] > num[j]) {inttemp = num[i];num[i] = num[j];num[j] = temp;

}}}

printf("排序后为:");

for(inti=0; i <6; i++) {printf(" %d",num[i]);}

}

常见的面试算法_第1张图片
冒泡排序


//选择排序(每一次找出最大或者最小的元素,比较除了当前的自己)

voidselectSort(){

intnum[6];printf("请输入6个数:");

for(inti =0; i<6; i++) {scanf("%d",&num[i]);}

for(inti =0; i <5; i++){for(intj =i+1; j <6; j++){if(num[i] < num[j]){

inttemp = num[i];num[i] = num[j];num[j] = temp;}}}

printf("排序后为:");

for(inti=0; i <6; i++) {printf(" %d",num[i]);}

}

常见的面试算法_第2张图片
选择排序

//判断是否是回文

voidhuiwen(){

intn =1111221111;intp = n;intk =0;

while(p!=0) {k=k*10+p%10;p=p/10;//出去已经处理的余数(也就是最后一个数)

}if(k==n) {printf("%d是回文",n);}else{printf("%d不是回文",n);}}

常见的面试算法_第3张图片
判断是否是回文


//反转链表(链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域)

//定义链表

structnode{intval;structnode*pNext;};

//生成链表

structnode*gen(){structnode*pHead =NULL;

for(inti =10; i >0; i--){structnode* p = (structnode*)malloc(sizeof(structnode));p ->val= i;p ->pNext= pHead;pHead = p;}returnpHead;}

//打印链表

voiddisplay(structnode*pHead){while( pHead !=NULL){printf("%d ", pHead->val);pHead = pHead->pNext;}printf("\n");}

#pragma下面是实现反转列表的几种方式

//1、递归实现

structnode* reverse(structnode*pHead){if(pHead ==NULL|| pHead ->pNext==NULL){returnpHead;}

structnode*p = pHead ->pNext;structnode*pNewHead =reverse(p);p ->pNext= pHead;

pHead ->pNext=NULL;returnpNewHead;}

intmain(intargc,constchar* argv[]) {structnode*pHead =gen();display(pHead);pHead =reverse(pHead);

display(pHead);return0;}

常见的面试算法_第4张图片
常见的面试算法_第5张图片
反转链表

最小二叉树思想

常见的面试算法_第6张图片
最小二叉树

你可能感兴趣的:(常见的面试算法)