算法
标配的小号
本人CSDN博客已停止更新。更多更新的技术文章,请移步本人博客园,博客园链接为http://www.cnblogs.com/biaopei/
展开
-
数据结构与算法面试题80道
因为原文链接已挂,所以这里无法给出原文链接,但还是要感谢一下原文作者July1.把二元查找树转变成排序的双向链表 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不能创建任何新的结点,只调整指针的指向。 10 / \ 6 14 / \ / \ 4 8 12 16 转换成双向链表 4=6=8=10=12=14=16。首先我们定义的二元查找树转载 2017-05-21 10:57:31 · 874 阅读 · 0 评论 -
汉诺塔问题
#include<stdio.h> void work(int d,char A,char B,char C) { if(d==1)//d为1时,就不再递归了 { printf("move %d from %c to %c\n",d,A,C); } else { work(d-1,A,C,B); prin原创 2017-05-31 09:28:33 · 345 阅读 · 0 评论 -
算法与数据结构——选择,插入,希尔排序
转自大神的文章,原文传送门http://www.cnblogs.com/yangecnu/p/Introduction-Insertion-and-Selection-and-Shell-Sort.html,本文为精简版首先来看比较简单的选择排序(Selection sort),插入排序(Insertion sort),然后在分析插入排序的特征和缺点的基础上,介绍在插入排序基础上改进的希尔排序(Sh原创 2017-05-17 09:39:27 · 360 阅读 · 0 评论 -
排序算法——二元选择排序
二元选择排序 原理:这个是在选择排序方法上改进的。这种排序法会同时查找最大值和最小值。找到最大最小值之后需要注意它是怎么放到正确的位置的,我就是在交换位置这里耗了一个下午,先是把头尾的值放到最大最小的那两个位置那里,在把最小和最大值分别放到头尾。[03:20:54] vi eryuanselect.c [03:21:34] gcc eryuanselect.c [03:21:38] ./a.o原创 2017-05-18 23:23:27 · 569 阅读 · 0 评论 -
排序算法——堆排序
有一点需要注意,那就是,左孩子的下标是2×s+1,右孩子下标是2×s,注意是下标,例如数组1到10,那么下标为13579的全部是左孩子(构造树的时候1第一个数是根,第二个数是左孩子,第三个是右孩子,然后第四个数则是第一个左孩子的左孩子,以此类推)。最大堆:每个父节点都比子节点大;最小堆:每个父节点都比子节点小 [22:42:20] vi t.c [22:42:27] gcc t.c [22:42:2原创 2017-05-19 13:46:22 · 203 阅读 · 0 评论 -
排序算法——冒泡算法及其优化
所谓冒泡算法,就是第一个跟第二个比,第二个跟第三个比。。。,首先从第一个树比到最后一个数,如果第一个比第二个大,那么一二互换,如果二三比,二大,二三再互换,如此下去,最大的数就会排到最后面,然后就是再从第一个数比到倒数第二个,重复上面的动作 现在我们看一下代码[22:54:16] vi bublle_1.c [22:54:28] gcc bublle_1.c [22:54:32] ./a.ou原创 2017-05-19 14:51:13 · 241 阅读 · 0 评论 -
排序算法——快速排序
原理:文字说不清楚,直接在代码解释了[08:32:22] gcc quicksort.c [08:32:24] ./a.out 1 2 3 4 5 6 7 8 9 10 [08:32:26] cat quicksort.c #include<stdio.h> void swap(int *a,int *b)//这个是交换懂吧,注意需要使用指针,否则只是使用a,b,对于数组的值是没有交换效果的原创 2017-05-20 00:06:34 · 210 阅读 · 0 评论 -
双向链表
我主要说一下双向链表的创建,顺便说了一下删除尾节点的实现[00:51:51] gcc doubledirectlink.c [00:51:55] ./a.out 1->2->3->4->5now del last 1->2->3->4deled [00:51:57] cat doubledirectlink.c #include<stdio.h> #include<malloc.h> typed原创 2017-05-20 16:13:33 · 211 阅读 · 0 评论 -
数组中最大和的子数组
只需要输出最大子数组和结果[08:27:34] gcc sonarrysum.c [08:27:37] ./a.out 18 [08:27:39] cat sonarrysum.c #include<stdio.h> void max(int a[],int len) { int i,max=0,count=0; for(i=0;i<len;i++)//在这里我们先不管数组全部为原创 2017-05-20 23:46:51 · 322 阅读 · 0 评论 -
算法——二分搜索
思路:首先从数组中间的数把数组分成两部分,如果查找的数比中间的数大,说明接下来需要查找右边的部分,令中间的的下标+1为下一次开始查找的开始位置,再从low到high之间查找,一直循环。[root@bogon code]# cat erfen.c #include<stdio.h> int work(int x,int a[],int len) { int low,mid,high;原创 2017-06-04 17:08:05 · 394 阅读 · 0 评论