摘要: 本栏目专门用来分享与数据结构和算法有关的源码,这些源码都是用心整理的,并且附带了注释、思路解析以及精美图片。重要的是,这些源码都是免费的。 稀疏矩阵的三元组表示(带源码+解析) 头结点和头指针在链表中的作用 链表节点的插入,链表插入节点 哈夫曼(赫夫曼,哈弗曼)编码算法(带源码+解析) 二叉树遍历算 阅读全文
posted @ 2018-05-23 11:12 程序员进阶笔记 阅读(1173) 评论(0) 推荐(0) 编辑
摘要: 链表翻转,简单地理解,就是将链表的头部结点变为链表的尾部结点,与此同时将原链表的尾部结点变成头部结点。如下图所示: 图 1 链表翻转示意图 提示:H 为头指针,图示中的链表无头结点,头指针直接指向首元结点。 将链表进行翻转的方法有多种,本节给大家介绍两种实现方法。 方法一 实现链表翻转最直接的方法就 阅读全文
posted @ 2018-05-23 11:11 程序员进阶笔记 阅读(1306) 评论(0) 推荐(1) 编辑
摘要: 基数排序不同于之前所介绍的各类排序,前边介绍到的排序方法或多或少的是通过使用比较和移动记录来实现排序,而基数排序的实现不需要进行对关键字的比较,只需要对关键字进行“分配”与“收集”两种操作即可完成。 例如对无序表{50,123,543,187,49,30,0,2,11,100}进行基数排序,由于每个 阅读全文
posted @ 2018-05-23 10:53 程序员进阶笔记 阅读(1301) 评论(0) 推荐(0) 编辑
摘要: 本节介绍一种不同于插入排序和选择排序的排序方法——归并排序,其排序的实现思想是先将所有的记录完全分开,然后两两合并,在合并的过程中将其排好序,最终能够得到一个完整的有序表。 例如对于含有 n 个记录的无序表,首先默认表中每个记录各为一个有序表(只不过表的长度都为 1),然后进行两两合并,使 n 个有 阅读全文
posted @ 2018-05-23 10:47 程序员进阶笔记 阅读(947) 评论(0) 推荐(0) 编辑
摘要: 本节介绍三种选择排序算法,分别为:简单选择排序、树形选择排序和堆排序。 简单选择排序 该算法的实现思想为:对于具有 n 个记录的无序表遍历 n-1 次,第 i 次从无序表中第 i 个记录开始,找出后序关键字中最小的记录,然后放置在第 i 的位置上。例如对无序表{56,12,80,91,20}采用简单 阅读全文
posted @ 2018-05-23 10:39 程序员进阶笔记 阅读(5529) 评论(0) 推荐(2) 编辑
摘要: 上节介绍了如何使用起泡排序的思想对无序表中的记录按照一定的规则进行排序,本节再介绍一种排序算法——快速排序算法(Quick Sort)。 C语言中自带函数库中就有快速排序——qsort函数 ,包含在 <stdlib.h> 头文件中。 快速排序算法是在起泡排序的基础上进行改进的一种算法,其实现的基本思 阅读全文
posted @ 2018-05-23 09:45 程序员进阶笔记 阅读(1883) 评论(0) 推荐(0) 编辑
摘要: 起泡排序,别名“冒泡排序”,该算法的核心思想是将无序表中的所有记录,通过两两比较关键字,得出升序序列或者降序序列。 例如,对无序表{49,38,65,97,76,13,27,49}进行升序排序的具体实现过程如图 1 所示: 图 1 第一次起泡 如图 1 所示是对无序表的第一次起泡排序,最终将无序表中 阅读全文
posted @ 2018-05-23 09:38 程序员进阶笔记 阅读(14393) 评论(0) 推荐(3) 编辑
摘要: 希尔排序,又称“缩小增量排序”,也是插入排序的一种,但是同前面几种排序算法比较来看,希尔排序在时间效率上有很大的改进。 在使用直接插入排序算法时,如果表中的记录只有个别的是无序的,多数保持有序,这种情况下算法的效率也会比较高;除此之外,如果需要排序的记录总量很少,该算法的效率同样会很高。希尔排序就是 阅读全文
posted @ 2018-05-23 09:35 程序员进阶笔记 阅读(2787) 评论(0) 推荐(0) 编辑
摘要: 前面章节中所介绍到的三种插入排序算法,其基本结构都采用数组的形式进行存储,因而无法避免排序过程中产生的数据移动的问题。如果想要从根本上解决只能改变数据的存储结构,改用链表存储。表插入排序,即使用链表的存储结构对数据进行插入排序。在对记录按照其关键字进行排序的过程中,不需要移动记录的存储位置,只需要更 阅读全文
posted @ 2018-05-23 09:31 程序员进阶笔记 阅读(7506) 评论(0) 推荐(1) 编辑
摘要: 2-路插入排序算法是在折半插入排序的基础上对其进行改进,减少其在排序过程中移动记录的次数从而提高效率。 具体实现思路为:另外设置一个同存储记录的数组大小相同的数组 d,将无序表中第一个记录添加进 d[0] 的位置上,然后从无序表中第二个记录开始,同 d[0] 作比较:如果该值比 d[0] 大,则添加 阅读全文
posted @ 2018-05-23 09:26 程序员进阶笔记 阅读(524) 评论(0) 推荐(0) 编辑
摘要: 上一节介绍了直接插入排序算法的理论实现和具体的代码实现,如果你善于思考就会发现该算法在查找插入位置时,采用的是顺序查找的方式,而在查找表中数据本身有序的前提下,可以使用折半查找来代替顺序查找,这种排序的算法就是折半插入排序算法。 该算法的具体代码实现为: 折半插入排序算法相比较于直接插入排序算法,只 阅读全文
posted @ 2018-05-23 09:23 程序员进阶笔记 阅读(1124) 评论(0) 推荐(0) 编辑
摘要: 插入排序算法是所有排序方法中最简单的一种算法,其主要的实现思想是将数据按照一定的顺序一个一个的插入到有序的表中,最终得到的序列就是已经排序好的数据。 直接插入排序是插入排序算法中的一种,采用的方法是:在添加新的记录时,使用顺序查找的方式找到其要插入的位置,然后将新记录插入。 很多初学者所说的插入排序 阅读全文
posted @ 2018-05-23 09:20 程序员进阶笔记 阅读(773) 评论(0) 推荐(0) 编辑
摘要: 排序算法 本章详细介绍多种排序算法:插入排序算法、快速排序算法、选择排序算法、归并排序和基数排序等,不仅介绍算法的理论实现,还有可运行的完整代码以及讨论各自的时间复杂度。 本章内容:1. 插入排序算法2. 折半插入排序算法(折半排序算法)3. 2-路插入排序算法4. 表插入排序算法5. 希尔排序算法 阅读全文
posted @ 2018-05-23 09:16 程序员进阶笔记 阅读(370) 评论(0) 推荐(0) 编辑