
剑指offer
wyn126
跑够一万公里就结婚
展开
-
从尾到头打印单链表
从尾到头打印链表:输入一个链表的头节点,从尾到头反过来打印每个节点的值。 下面介绍三种方法来实现此题目 ①直接改变指针的方向,这种方法一般不提倡,它改变了链表的结构 ②既然是从尾到头打印,我们很容易就可以想到栈,栈的结构是“后进先出” 我们可以先遍历一遍链表,如果当前节点不为空,就让其入栈,用栈先将当前遍历的值保存起来,知道遍历到链表的最后一个节点为空之后,再将栈中保存的值输出。 首先先...原创 2018-04-02 21:32:48 · 150 阅读 · 0 评论 -
二叉树面试题
二叉树的高度题目:输入一棵二叉树的根结点,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 思路: 1、如果树为空,返回0 2、若果二叉树只有一个节点,返回1 3、如果二叉树中有左子树,返回左子树的高度+1 ...原创 2018-08-06 10:40:53 · 282 阅读 · 0 评论 -
非比较排序——归并排序
归并排序算法思路 首先让数组中的没一个数成为长度为1的有序区间,让后将相邻的长度为1的有序区间进行合并,得到最大长度为2的有序区间,接下来再把相邻有序区间进行合并,得到相邻长度为4的有序区间……最后将剩下的所有有序区间进行合并,直到让数组中的所有数合并成为一个有序区间。归并排序的实现需要开辟一个新的数组来保存合并之后的值 用图解释如下: 代码实现如下:#include<io...原创 2018-08-15 09:41:42 · 295 阅读 · 0 评论 -
【直接插入排序】和【希尔排序】
直接插入排序直接插入排序的思想:选取待排序数组的第一个元素,作为一个有序区间,将后面待排序的数组看作是一个无序区间 选取有序区间的最后一个元素key与待排序区间的第一个元素进行比较,如果待排序区间的第一个元素的值小于key的值,就将有序区间的最后一个元素后移,再将key与已经有序的区间其他值进行比较,直到找到一个元素的值小于key的值,将key插入到该元素后面的位置 直接插入排序...原创 2018-08-12 21:37:43 · 295 阅读 · 0 评论 -
冒泡排序,快速排序,直接插入排序,希尔排序,简单选择排序,堆排序,冒泡排序总结
从算法的简单性来看:简单算法:冒泡排序,简单选择排序,直接插入排序改进算法:希尔排序,堆排序,归并排序,快速排序从平均情况来看:堆排序,归并排序,快速排序好于希尔排序从最好情况来来看:冒泡排序和直接插入排序更好一些,要是待排数组基本有序,不应该考虑四种复杂算法从最坏情况来看:堆排序与归并排序好于快排以及简单排序从空间复杂度来看:归并排序需要额外开辟空间,时间复杂度为O(N),快...原创 2018-08-15 11:03:25 · 1013 阅读 · 0 评论 -
交换排序之冒泡排序&&快速排序
1.最简单排序实现 冒泡排序的思想其实很简单,它是一种简单的选择排序,在细节上有很多种优化的方法。 它的基本思想是:两两比较相邻记录的关键字,如果反序则进行交换。 首先先来看一段简单的冒泡排序://冒泡排序初级版void Bubble(int* arr, int sz){ int i, j; //从下标为0的第一个元素与后面的每一个元素进行比较 for (i = 0原创 2017-12-26 17:41:24 · 4290 阅读 · 1 评论