数据结构与算法
文章平均质量分 80
hongyansmile
这个作者很懒,什么都没留下…
展开
-
编程面试的10大算法概念汇总
本文由 伯乐在线 - 敏敏 翻译自 programcreek.com。欢迎加入技术翻译小组。转载请参见文章末尾处的要求。以下是在编程面试中排名前10的算法相关的概念,我会通过一些简单的例子来阐述这些概念。由于完全掌握这些概念需要更多的努力,因此这份列表只是作为一个介绍。本文将从Java的角度看问题,包含下面的这些概念:1. 字符串2. 链表3. 树4. 图5.转载 2013-12-24 09:32:27 · 820 阅读 · 0 评论 -
内部排序之四:归并排序和快速排序
前言 之所以把归并排序和快速排序放在一起探讨,很明显两者有一些相似之处:这两种排序算法都采用了分治的思想。下面来逐个分析其实现思想。归并排序 实现思想 归并的含义很明显就是将两个或者两个以上的有序表组合成一个新的有序表。归并排序中一般所用到的是2-路归并排序,即将含有n个元素的序列看成是n个有序的子序列,每个子序列的长度为1,而后两两合并,得转载 2014-03-17 11:30:54 · 1046 阅读 · 0 评论 -
内部排序之三:堆排序
前言 堆排序、快速排序、归并排序(下篇会写这两种排序算法)的平均时间复杂度都为O(n*logn)。要弄清楚堆排序,就要先了解下二叉堆这种数据结构。本文不打算完全讲述二叉堆的所有操作,而是着重讲述堆排序中要用到的操作。比如我们建堆的时候可以采用堆的插入操作(将元素插入到适当的位置,使新的序列仍符合堆的定义)将元素一个一个地插入到堆中,但其实我们完全没必要这么做,我们有执行操作更少的方法,转载 2014-03-17 11:28:22 · 749 阅读 · 0 评论 -
内部排序之二:冒泡排序和选择排序
前言 之所以把冒泡排序和选择排序放在一起,是因为二者的实现代码很相似,而且都是最基本的排序方式,非常容易理解和实现。当然,如果仅仅是为了讲述这两种排序方式,那也根本没必要写这篇博文了。和上篇博文一样,我会在冒泡排序和选择排序原始代码的基础上给出一些改进和优化,这才是本文的重点所在。原始冒泡排序 冒泡排序的思想很简单,如果要求排序后序列中元素按照从小到大的顺序排列,则转载 2014-03-17 11:20:01 · 1056 阅读 · 0 评论 -
内部排序之一:插入排序和希尔排序的N中实现
前言 本来想将所有的内部排序总结为一篇博文,但是随着研究的深入,还是放弃了这个念头,斟前酌后,还是觉得分开来写比较好,具体原因,看完本篇博文也就自然明了了。 本篇文章主要探讨插入排序和希尔排序,之所将二者放在一起,很明显,是因为希尔排序是建立在插入排序的基础之上的。 注:以下各排序算法的N种实现方法大部分都是我根据算法思想,自己写出来的,或者是参考其本身的经典实转载 2014-03-17 11:21:42 · 875 阅读 · 0 评论 -
内部排序之五:计数排序、基数排序和桶排序
前言 最后三种排序算法了,由于都不是基于比较的排序,因此这三种排序算法可以以线性时间运行。但是因为限制条件的特殊性,因此应用面没有基于元素比较的排序算法广,但是在很多特定的情况下还是蛮有用途的,而且效率极高。计数排序 计数排序是建立在这样的前提条件下的:假设n个输入元素的每一个都是0到k区间内的一个整数,其中k为某个整数。因此我们后面所写的程转载 2014-03-17 11:33:58 · 934 阅读 · 0 评论 -
将一个链表逆序并输出
将一个链表逆序并输出。我用了两种方法来实现,第一种是借助了一个新的空链表;第二种是在原来链表的基础上直接实现逆序。 头文件: #include #include #include typedef int ElemType; typedef struct Node {//结点结构 ElemType value; //转载 2013-12-25 15:34:11 · 1110 阅读 · 0 评论 -
链表逆序输出(递归妙)
四种方式实现--从尾到头输出链表 方法一:借用栈倒序输出链表 方法二:先翻转链表,再顺序输出 方法三:递归实现,一个字妙,两个字很妙,三个字太妙了 方法四:用数组实现 方法一:借用栈倒序输出链表 因为栈是先进后出,把链表中的元素存进栈中,链表前面的元素在栈底,后面的元素在栈顶,链表后面的元素先出栈 方法二:先翻转链表,再按顺序打印(主要是想自己实转载 2013-12-25 15:26:37 · 2018 阅读 · 0 评论 -
二叉树之BST、AVL和RBT
二叉查找树(Binary Search Tree)是满足如下性质的二叉树:①若它的左子树非空,则左子树上所有结点的值均小于根结点的值;②若它的右子树非空,则右子树上所有结点的值均大于根结点的值;③左、右子树本身又各是一棵二叉查找树。 通俗的讲,二叉查找树的左子树上的结点不比父结点大,右子树上的结点不比父结点小,即,设x为二叉查找树中的一个结点,如果y是x的左子树中的一个结点,则key转载 2013-12-24 09:29:21 · 1166 阅读 · 1 评论 -
4种常见的排序算法(Java版)
import java.util.Scanner;public class Sort {/*** 作者:zpc 功能: 实现主流的排序算法,并进实际行性能比较。 * 1、冒泡排序(改进版) * 2、简单选择排序 * 3、直接插入排序* 4、快速排序*/public static void main(String[] args) {System.转载 2014-04-10 22:27:04 · 654 阅读 · 0 评论