![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构和算法
文章平均质量分 52
雨破尘
B What I Wanna B
展开
-
java实现二叉树的遍历(递归和非递归)
现有一颗如下图所示的二叉树:其遍历的各种方式如下: 构造一颗如下图所示的二叉树,用java实现其前序,中序,后序遍历注意二叉树节点的定义如下:public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val =...原创 2018-03-07 16:18:25 · 39671 阅读 · 16 评论 -
八大排序(一):四种简单的排序(直接插入排序、希尔排序、冒泡排序、选择排序)
一、直接插入排序直接插入排序基本思想是每一步将一个待排序的记录,插入到前面已经排好序的有序序列中去,直到插完所有元素为止。 直接插入排序算法的运作如下: 假设有一组无序序列 R0, R1, … , RN-1。 (1) 我们先将这个序列中下标为 0 的元素视为元素个数为 1 的有序序列。 (2) 然后,依次把 R1, R2, … , RN-1 插入到这个有序序列中。所以,我们需要一个外部...原创 2018-05-06 15:17:44 · 11104 阅读 · 0 评论 -
八大排序(二):归并排序
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。分治法即将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案”修补”在一起,归并排序的速度仅次于快速排序,比较次数小于快速排序的比较次数,而移动次数一般多于快速排序的移动次数。归并排序的过程可...原创 2018-05-06 21:09:18 · 345 阅读 · 0 评论 -
八大排序(三):快速排序
快速排序的基本思想如下: 设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序是一种不稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。一趟快速排序的算法过程如下: 1)设置两个变量i、j,排序开始的时候:...原创 2018-05-07 16:36:01 · 317 阅读 · 0 评论 -
八大排序(四):堆排序
堆的定义堆是具有以下性质的完全二叉树: 每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆 每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆 如下图所示:对堆中的结点按层进行编号,将这种逻辑结构映射到数组中就是下面这个样子以上数组从逻辑上讲就是一个堆结构,用简单的公式来描述一下堆的定义就是: 大顶堆:arr[i] >= arr[2i+1] &&a...原创 2018-05-07 18:31:06 · 256 阅读 · 0 评论 -
八大排序(五):基数排序
基数排序与之前的其他七种排序方法都不同,它不需要比较关键字的大小。 以下用一个例子来讲解基数排序: 假设有一个数组:73, 22, 93, 43, 55, 14, 28, 65, 39, 81 1.首先根据个位数的数值,在走访数值时将它们分配至编号0到9的桶子中,分配结果如下图: 2.将这些桶子中的数值按顺序重新串接起来,成为数列:81, 22, 73, 93, 43, 14, 55,...原创 2018-05-07 19:33:03 · 258 阅读 · 0 评论