算法和数据结构
vic__vic
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
轻松搞定面试中的链表题目
链表是最基本的数据结构,面试官也常常用链表来考察面试者的基本能力,而且链表相关的操作相对而言比较简单,也适合考察写代码的能力。链表的操作也离不开指针,指针又很容易导致出错。综合多方面的原因,链表题目在面试中占据着很重要的地位。本文对链表相关的面试题做了较为全面的整理,希望能对找工作的同学有所帮助。链表结点声明如下:struct ListNode{ int m_nKey转载 2014-04-15 21:25:34 · 594 阅读 · 0 评论 -
希尔排序及C语言实现
希尔排序的实质就是分组插入排序,该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。 该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很转载 2014-04-05 14:38:48 · 1151 阅读 · 0 评论 -
冒泡排序的三种实现
冒泡排序是非常容易理解和实现,,以从小到大排序举例:设数组长度为N。1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。3.N=N-1,如果N不为0就重复前面二步,否则排序完成。 按照定义很容易写出代码:[cpp] view plai转载 2014-04-05 15:38:24 · 469 阅读 · 0 评论 -
快速排序优化
转载自:http://blog.youkuaiyun.com/wzy_1988/article/details/8043168 前言 今天要重写之前的快排算法,重新翻看自己之前的博客,总是会有稚嫩的感觉,这是好事,说明我一直在进步! 快排是分治策略很好的应用,IT面试大部分都会考察你对快排算法的掌握,博主面试阿里巴巴、创新工厂均在快排算法上有涉及,这里记录一下转载 2014-04-05 11:33:27 · 630 阅读 · 0 评论 -
直接选择排序及交换二个数据的正确实现
直接选择排序和直接插入排序类似,都将数据分为有序区和无序区,所不同的是直接播放排序是将无序区的第一个元素直接插入到有序区以形成一个更大的有序区,而直接选择排序是从无序区选一个最小的元素直接放到有序区的最后。 设数组为a[0…n-1]。1. 初始时,数组全为无序区为a[0..n-1]。令i=02. 在无序区a[i…n-1]中选取一个最小的元素,将其转载 2014-04-05 16:08:08 · 486 阅读 · 0 评论 -
直白快速排序算法,C语言实现
转载自:http://www.brieftime.net/articles/719前面说了一篇堆排序,觉得不过瘾,再来一篇快速排序。 同样,理论这里暂不涉及,我们直接通过实例入手:如下为一个含有10个元素的数组: 0 1转载 2014-04-05 11:33:25 · 728 阅读 · 0 评论 -
插入排序(c语言版)
前言插入排序(insertion sort)的基本思想:每次将一个待排序的记录,按其关键字大小插入到前面已经排序好的序列中,直到全部记录插入完成为止.直接插入排序基本思想假设待排序的记录存放在数组R[1..n]中。初始时,R[1]自成1个有序区,无序区为R[2..n].从i = 2起直到i = n 为止,依次将R[i]插入当前的有序区R[1..i - 1]中,生成含转载 2014-04-04 16:10:45 · 542 阅读 · 0 评论 -
海量数量处理之位图
编程珠玑第二章开始提出了三个问题,其中第一个问题是这样的:一个顺序文件至多包括40亿个32位的整数,这些数是无序的,找出一个不在该文件中的32位整数。(可能有数字是不在该文件中的,因为2^32总共包括了42+亿个数,因此肯定有整数是不在该文件中的,这是鸽巢原理吧?)据说这是腾讯的一道面试题,大概描述如下:问题描述:问题的描述大概就是这样了。刚看到这个转载 2014-04-16 23:10:34 · 652 阅读 · 0 评论 -
二分查找
二分查找,最基本的算法之一,也是面试中常被考察的重点,因为基本的算法最能反映出一个人的基础是否扎实。本文对二分查找相关题目做一个总结。题目列表:1. 给定一个有序(非降序)数组A,求任意一个i使得A[i]等于target,不存在则返回-12. 给定一个有序(非降序)数组A,可含有重复元素,求最小的i使得A[i]等于target,不存在则返回-13. 给定一个有序(非降序)数转载 2014-04-16 22:27:08 · 693 阅读 · 0 评论 -
轻松搞定面试中的二叉树题目
树是一种比较重要的数据结构,尤其是二叉树。二叉树是一种特殊的树,在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点(或左孩子和右孩子),并且二叉树的子树有左右之分,其次序不能任意颠倒。二叉树是递归定义的,因此,与二叉树有关的题目基本都可以用递归思想解决,当然有些题目非递归解法也应该掌握,如非递归遍历节点等等。本文努力对二叉树相关题目做一个较全的整理总结,希望对找工作的同学有所帮助。转载 2014-04-15 22:28:41 · 434 阅读 · 0 评论 -
单链表反转
单链表的每个节点都指向下一个节点,所以要想将单链表反序,需要同时知道相连的三个节点,这样将中间节点的指针指向前一个节点之后仍然可以继续向后遍历链表。算法实现如下:[cpp] view plaincopyNode * singleLinkedListReverse(Node *head) { //判断空链表、单节点链表转载 2014-04-15 16:51:55 · 418 阅读 · 0 评论 -
教你如何迅速秒杀掉:99%的海量大数据处理面试题
十道海量大数据处理面试题 1、海量日志数据,提取出某日访问百度次数最多的那个IP。 首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的IP(可以采用hash_map进行频率统计,然后再找出频率最大的几个)转载 2014-04-16 22:56:47 · 825 阅读 · 0 评论 -
用两个栈实现一个队列
大多数人的思路是:始终维护s1作为存储空间,以s2作为临时缓冲区。入队时,将元素压入s1。出队时,将s1的元素逐个“倒入”(弹出并压入)s2,将s2的顶元素弹出作为出队元素,之后再将s2剩下的元素逐个“倒回”s1。见下面示意图: 上述思路,可行性毋庸置疑。但有一个细节是可以优化一下的。即:在出队时,将s1的元素逐个“倒入”s2时,原在s1栈底的元素,不用“倒入”s2(转载 2014-04-15 23:25:51 · 486 阅读 · 0 评论 -
四道有趣的单链表面试题
以下给出链表结点的数据结构:1 typedef struct _list_node2 {3 double keyVal;4 struct _list_node *next;5 }ListNode;Q1 单链表的反序Code 1 ListNode* reverseList(ListNode* head) 2 { 3 ListN转载 2014-04-15 18:33:27 · 531 阅读 · 0 评论 -
二分查找算法
int binary_search(int array[],int n,int value) { int left=0; int right=n-1; //如果这里是int right = n 的话,那么下面有两处地方需要修改,以保证一一对应: //1、下面循环的条件则是while(left //2、循环内当array[转载 2014-04-15 22:46:52 · 608 阅读 · 0 评论 -
二叉树遍历(前中后层序/非递归)
一:前中后序递归实现[cpp] view plaincopy/* 前中后序的递归实现理解起来最为简单,要点在于visit(node)的位置。 */ /* 前中后序递归实现 */ //前序遍历 void BT_PreOrder(BitTree node) { if(!node) return;转载 2014-04-15 18:30:36 · 585 阅读 · 0 评论 -
各大公司笔试面试题之数据结构与算法
1. 把二元查找树转变成排序的双向链表[cpp] view plaincopy//基本思想:假设根的左右两棵子树都已经转为链表,则只需将根指向左孩子的链指向左链表的最后一个节点 //将根指向右孩子的链指向右链表的第一个节点 #include using namespace std; struct node转载 2014-04-09 15:25:04 · 1269 阅读 · 0 评论
分享