数据结构与算法
文章平均质量分 60
蒲公英291
这个作者很懒,什么都没留下…
展开
-
LeetCode
树 94 二叉树的中序遍历 (DFS) 95. 不同的二叉搜索树 II 96. 不同的二叉搜索树 99. 恢复二叉搜索树 102 二叉树的层序遍历 (BFS) 103 二叉树的锯齿形状遍历 (BFS) 145 二叉树的后续遍历 (DFS) 数组 03 数组中的重复数 04 寻找两个有序数组的中位数 11 盛水最多的容器 15 三数之和 31 下一个排列 链表 19 删除链表的倒数第N个节点21. 合并两个有序链表...原创 2021-05-11 16:43:19 · 181 阅读 · 0 评论 -
快速排序 (Java)
快速排序其实是对冒泡排序的升级,都属于交换排序类,只不过它的实现,增大了记录的比较和移动的距离,将关键字较大的记录从前面直接移动到后面,关键字较小的记录从后面直接移动到前面,从而减少了总的比较次数与移动次数,它的基本思想是通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序的目的。 packag原创 2016-08-24 10:50:31 · 537 阅读 · 0 评论 -
回溯算法经典应用之—N皇后问题 (Java)
1、回溯算法简介 回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。用回溯算法解决问题的一般步骤为: 1、定义一个解空间,它包含问题的解。 2、利用适于搜索的方法组织解空间。 3、利用深度优先法搜索解空间。 4、利用限界函数避免移动到不可能产生解的子空间。 问题的解空间通常是在搜索问题的解的过程中动态产生原创 2016-08-24 15:37:35 · 4382 阅读 · 0 评论 -
回溯算法经典应用之—迷宫问题 (Java)
1、回溯算法简介 回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。用回溯算法解决问题的一般步骤为: 1)、定义一个解空间,它包含问题的解。 2)、利用适于搜索的方法组织解空间。 3)、利用深度优先法搜索解空间。 4)、利用限界函数避免移动到不可能产生解的子空间。 问题的解空间通常是在搜索问题的解的过原创 2016-08-24 17:28:42 · 1434 阅读 · 0 评论 -
归并排序 (Java)
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 它的原理是假设初始序列含有n个记录,则可以看成是n个有序的子序列,每个子序列的长度是1,然后两两归并,得到n/2个原创 2016-08-24 10:40:11 · 353 阅读 · 0 评论 -
希尔排序 (Java)
希尔排序也是一种插入式排序,是对直接插入排序的一种改进,希尔排序就是将待排序序列分组,这种分组是将相隔某个增量的记录组成一个子序列,实现跳跃式的移动,使得排序的效率提高。其实这个增量选取还是比较关键的,选取的不当可能导致排序结果不对。可究竟应该取什么增量好,目前还是一个数学难题。 Java版的代码: package com.qian.sort; import java.util.Arrays原创 2016-08-24 10:15:42 · 484 阅读 · 0 评论 -
堆排序 (Java)
堆排序就是利用堆(大顶堆或者小顶堆)进行排序的方法,这个先假设用大顶堆,它的基本思想是,将待排序的序列构造成一个大顶堆。此时,整个序列的最大值就是堆顶的根节点,然后将它移走,其实就是将其与对数组的末尾元素交换,此时末尾元素就是最大元素,然后将剩余的n - 1个序列重新构造成一个堆,这样就会得到n个元素中的次大值,如此反复,完成排序。 代码如下: package com.qian.sort;原创 2016-08-24 10:27:19 · 412 阅读 · 0 评论 -
直接插入排序 (Java)
直接插入排序是一种稳定的排序算法,它的基本操作就是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。 排序的过程可以联想一下玩扑克牌的时候摸牌的过程,每摸一张牌,都会理一次牌,也就是插入排序的原理。 Java版的代码如下: package com.qian.sort; import java.util.Arrays; public class Inser原创 2016-08-24 10:02:45 · 419 阅读 · 0 评论 -
排序之冒泡排序 (Java)
冒泡排序是一种最简单的排序算法,是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果范旭则交换,直到没有反序的记录为止,是一种稳定的排序算法。 Java版的代码如下: package com.qian.sort; import java.util.Arrays; public class BubbleSort { void bubbleSort(int[] nums) {原创 2016-08-23 19:54:38 · 358 阅读 · 0 评论 -
简单选择排序 (Java)
简单选择排序就是通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录交换。 简而言之,就是每一趟记录最小值得索引值,然后交换,是一种稳定的排序算法。 Java版的代码如下: package com.qian.sort; import java.util.Arrays; public class SelectSort { public void sele原创 2016-08-23 20:00:32 · 312 阅读 · 0 评论