数据结构与算法基础
文章平均质量分 76
面临找工作,记录常用的数据结构与常用的算法实现。
牧之丶
但行好事,莫问前程。
展开
-
【数据结构树表的查找】二叉排序树详解和代码(生成、插入、查找、最大值、最小值、删除、中序遍历、销毁)
二叉排序树(简称BST)又称二叉查找(搜索)树,其定义为:二叉排序树或者是空树,或者是满足如下性质的二叉树: (1)若它的左子树非空,则左子树上所有记录的值均小于根记录的值; (2)若它的右子树非空,则右子树上所有记录的值均大于根记录的值; (3)左、右子树本身又各是一棵二叉排序树。注意:二叉排序树中没有相同关键字的节点。对二叉排序树进行中序遍原创 2015-04-27 20:16:34 · 6934 阅读 · 2 评论 -
【数据结构线性表查找】——顺序查找和折半查找详解和代码
前言查找的定义是:给定一个值k,在含有n个记录的表中找出关键字等于k的记录。若找到,则查找成功,返回该记录的信息或该记录在表中的位置;否则查找失败,返回相关的指示信息。采用哪一种查找方法,需要考虑两点 (1)使用哪种数据结构来表示“表”; (2)是对无序集合查找还是对有序集合查找。线性表三种在线性表上进行查找的方法: (1)顺序查找原创 2015-04-23 20:08:55 · 14598 阅读 · 0 评论 -
【内部排序】八:归并排序(Merge Sort)详解与代码
归并排序是多次将两个或两个以上的有序表合并成一个新的有序表。最简单的归并是直接将两个有序的子表合并成一个有序的表。 2-路归并排序在内部排序中,通常采用的是2-路归并排序。即:将含有n个元素的序列看成是n个有序的子序列,每个子序列的长度为1,而后两两合并,得到n/2个长度为2或1的有序子序列,再进行两两合并。。。直到最后由两个有序的子序列合并成为一个长度为n的有序序列。2-路归并的核心操原创 2015-04-23 11:04:11 · 4121 阅读 · 5 评论 -
【内部排序】七:堆排序(Heap Sort)详解与代码(超详细注释版)
堆排序是选择排序的一种,每一趟从待排序的记录中选出关键字最小的记录,顺序放在有序的子表中,直到全部记录排序完毕。关于堆排序的讲解,兰亭风雨在http://blog.csdn.net/ns_code/article/details/20227303里讲解的非常好,推荐大家看看。我这里做个总结:二叉堆: 二叉堆其实是一棵有着特殊性质的完全二叉树,父节点的值总是大于等于(或小于等于)其左原创 2015-04-22 22:03:04 · 3203 阅读 · 2 评论 -
【内部排序】六:直接选择排序(Straight Selection Sort)详解与代码
选择排序的基本思想是:每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子表的最后,直到全部记录排序完毕。 两种选择排序方法: (1)直接选择排序 (2)堆排序每一趟总是从无序区选出全局最小(最大)的关键字,所以适用于从大量元素中选择最小或最大的一部分元素。一、基本思想第i趟排序开始时,当前有序区和无序区分别为R[0..i-1]和R原创 2015-04-21 11:28:52 · 1510 阅读 · 0 评论 -
【内部排序】五:快速排序(Quick Sort)详解与代码
接着上一篇,这篇详解快速排序。快速排序是由冒泡排序改进而得的,采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。分治法的基本思想 分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。一、基本思想:在待排序的n个记录中任取一个记录(通常取第一个记录)原创 2015-04-20 22:51:20 · 2483 阅读 · 0 评论 -
【内部排序】四:冒泡排序(Bubble Sorting)详解与代码
交换排序的基本思想:两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。两种交换排序: (1)冒泡排序 (2)快速排序一、冒泡排序的基本思想:通过无序区中相邻记录关键字间的比较和位置的交换,使关键字最小的记录如气泡一般逐渐往上“漂浮”直至“水面”。整个算法是从最下面的记录开始,对每两个相邻的关键字进行比较,原创 2015-04-20 21:10:29 · 2176 阅读 · 0 评论 -
【内部排序】三:希尔排序(Shell Sort)的多种实现(不断优化+源码)
当我们看代码时,一时不能理解的话。画下草图,用实例来分析下,自己举个例子,跟着代码的执行流程一步步走,回过头来再看就明白了。希尔排序也是一种插入排序方法,实际上是一种分组插入方法。一、基本思想:先取定一个小于n的整数d1作为第一个增量,把表的全部记录分成d1个组,所有距离为d1的倍数的记录放在同一个组中,在各组内进行直接插入排序; 然后取第二个增量d原创 2015-04-20 18:09:32 · 2192 阅读 · 0 评论 -
【内部排序】二:折半插入排序(binary insertion sorting)实现(源码)
上一篇文章中直接插入排序算法简单,且容易实现,当待排序的长度n很小时,是一种很好的排序方法,尤其当原始序列接近有序时,效率更好。如果待排序的长度n很大,则不适宜采用直接排序。这时我们可以考虑对其做些改进,我们可以从减少比较和移动的次数入手,因此可以采用折半插入排序,其思想类似于折半查找。由于排序算法过程中,就是不断的依次将元素插入前面已排好序的序列中。由于前半部分为已排好序的数列,这样我们不用按顺原创 2015-04-16 11:57:53 · 1557 阅读 · 0 评论 -
【内部排序】一:直接插入排序(Straight Insertion Sorting)的多种实现(不断优化+源码)
插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。直接插入排序的基本实现思想直接插入排序(Straight Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过原创 2015-04-15 15:38:42 · 1737 阅读 · 1 评论