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