数据结构
文章平均质量分 68
山风wind
晚起的鸟儿被虫吃
展开
-
八大排序算法性质比较
八大排序算法性质比较主要对比的为经典的内部排序算法。表中算法的详细讲解以及代码实现可以查看往期文章,直接点击即可。排序算法-直接插入排序排序算法-希尔排序排序算法-冒泡排序排序算法-快速排序排序算法-简单选择排序排序算法-堆排序排序算法-归并排序排序算法-基数排序...原创 2021-12-31 15:36:10 · 952 阅读 · 0 评论 -
排序算法-基数排序
排序算法-基数排序算法思想完整代码实现:package com.sort;import java.util.LinkedList;import java.util.Queue;public class BaseSort { public static void main(String[] args) { int[] nums = {3,89,4,53,6,825,900,0,1000,53}; basesort(nums,nums.length);原创 2021-12-30 23:24:53 · 3430 阅读 · 3 评论 -
排序算法-归并排序
排序算法-归并排序算法思想归并:将两个或者两个以上的有序表组合成一个新的有序表的过程。假定待排序表中含有n个记录,则可以看成是n个有序的子表,每个子表的长度为1,然后两两归并,得到⌈n/2⌉\lceil n/2 \rceil⌈n/2⌉个长度为2或1的有序表;再两两归并,如此一直重复,直到合并成一个长度为n的有序表为止,这种排序方法称为2路归并排序。2路归并排序的过程如下图所示。从归并的过程不难看出,其代码实现可以基于分治思想递归实现。其基本问题是如何实现两个有序序列的归并操作,该操作可以通过使用辅原创 2021-12-30 21:02:47 · 4058 阅读 · 7 评论 -
排序算法-选择排序-堆排序
排序算法-选择排序-堆排序堆排序是一种树型选择排序方法。在排序过程中,将L[1...n]L[1 ... n]L[1...n]看成是一棵完全二叉树的顺序存储结构,利用完全二叉树中双亲结点和孩子结点之间的内在关系,在当前无序中选择关键字最大(或最小)的元素。1.堆(大根堆/小根堆)堆是一棵完全二叉树,此处的堆排序主要利用了完全二叉树的顺序存储结构。大根堆:任意的父节点都要大于等于其孩子结点。大根堆的根结点必然是树(堆)中最大的元素.小根堆:任意的父节点都要小于等于其孩子结点。小根堆的根结点必然是树(堆原创 2021-12-29 14:11:17 · 560 阅读 · 0 评论 -
二叉树-满二叉树、完全二叉树
二叉树-满二叉树、完全二叉树满二叉树一棵高度为h,并且含有2h−12^{h}-12h−1个结点的二叉树称为满二叉树,即树中的每一层都含有最多的结点。满二叉树的叶子节点都集中在二叉树的最下一层,并且除叶子结点之外的每个结点度数均为2.(二叉树结点的度即为结点的孩子个数)。特点:只有最后一层有叶子结点。不存在度为1的结点。按层序从1开始编号,自上而下,自左向右。这样每个结点对应一个编号,对于编号为i的结点,如果有双亲,其双亲为⌊i/2⌋\lfloor i/2\rfloor⌊i/2⌋,如果有左孩子原创 2021-12-28 16:22:40 · 6431 阅读 · 0 评论 -
排序算法-选择排序-简单选择排序
排序算法-选择排序-简单选择排序算法思想假设排序表为L[0...n−1]L[0...n-1]L[0...n−1],第iii趟排序即从L[i−1...n−1]L[i-1...n-1]L[i−1...n−1]中选择最小的元素与L(i−1)L(i-1)L(i−1)进行交换,每一趟排序可以确定一个元素的最终位置,这样经过n−1n-1n−1趟排序就可以使得整个排序表有序。每一趟在排序元素中选取关键字最小的元素加入有序子序列,每一趟排序可以确定一个元素的最终位置。n个元素的简单选择排序需要n-1趟处理,因为当原创 2021-12-27 21:16:49 · 719 阅读 · 0 评论 -
排序算法-交换排序-快速排序
排序算法-交换排序-快速排序每一次排序都会使得确定一个中间位置的元素。原创 2021-12-27 13:29:57 · 520 阅读 · 0 评论 -
排序算法-交换排序-冒泡排序
排序算法-交换排序-冒泡排序基于“交换”的排序:根据序列中两个元素的关键字的比较结果来对换这两个记录在序列中的位置。算法思想:从后往前(或者从前往后)两两比较相邻元素的值,若为逆序,则交换他们,如果两个元素相同的话,并不交换他们的位置,这样可以保证算法的稳定性,直到序列比较完毕。这样的过程为“一趟”冒泡排序。首先第一个关键字和第二个关键字进行比较,如果第一个大,则两者交换,否则不交换;然后第二个关键字与第三个关键字进行比较,如果第二个大,则两者交换,否则不交换…。一直按照这种方式进行下去,最终最原创 2021-12-25 22:38:19 · 914 阅读 · 0 评论 -
排序算法-希尔排序
排序算法-希尔排序算法思想先使表中的元素部分有序,然后再实现全局有序。原创 2021-12-25 21:08:23 · 1233 阅读 · 0 评论 -
排序算法一直接插入排序
排序算法一直接插入排序算法思想:每次将一个待排序的记录按照其关键字大小插入到前边已排好序的子序列中,直到全部记录插入完成为止。**图中下标为0-4的元素已经排好序了,下标为5-6的元素为待排序元素,现在指针或者下标指向5号元素13,我们需要将13插入到其左边排好序的元素中,即可完成对下标为5的元素的排序,之后依次对未排序元素进行上述操作即可。观察可知,待排序元素的左边的元素因为已经排好序了,所以总是有序的。代码实现:public class insertSort { public sta原创 2021-12-23 16:06:17 · 1228 阅读 · 3 评论 -
二叉树之哈夫曼树定义-构造-哈夫曼编码
二叉树之哈夫曼树的定义-构造-哈夫曼编码1.带权路径长度2.哈夫曼树的构造过程3.哈夫曼树的性质4.哈夫曼树的应用:哈夫曼编码,可以用于数据的压缩。1.带权路径长度节点的权:有某种现实意义的数值节点的带权路径长度:从树的根到该结点的路径长度(经过的边数)与该结点上的权值的乘积树的带权路径长度:树中所有叶结点的带权路径长度之和(WPL,Wighted Path Length)哈夫曼树的定义:在含有n个带权叶结点的二叉树中,其中带权路径长度(WPL)最小的二叉树称为哈夫曼树,也成最优二叉树。原创 2021-12-23 11:24:24 · 1461 阅读 · 0 评论