
数据结构
-Billy
这个作者很懒,什么都没留下…
展开
-
二叉树的存储结构
二叉树节点的表示法:二叉树数组表示法二叉树链表表示法“数组表示法”属于静态内存空间配置,而“链表表示法”是利用链表结构的方式,属于动态内存空间配置。、二叉树数组表示法/** * 树节点的定义 */ class TreeNode { int val; TreeNode left; // 左子树节点 TreeNode right; // 右子树节点 TreeNode(int x) {...原创 2018-06-01 21:39:32 · 865 阅读 · 0 评论 -
判断两棵二叉树是否相似
二叉树T1和T2相似,指的是T1和T2都是空的二叉树或者都只有一个根结点;或T1的左子树和T2的左子树是相似的并且T1的右子树和T2的右子树是相似的。分析:采用递归的思想求解。若T1和T2都是空树,则相似;若有一个为空另一个不为空,则不相似;否则递归地比较他们的左、右子树是否相似。...原创 2018-06-24 21:52:03 · 12519 阅读 · 4 评论 -
二分查找算法
二分查找,又称折半查找,它仅适用于有序的顺序表。基本思路是:首先将给定值key与表中中间位置元素的 关键字进行比较,若相等,则查找成功,返回该元素的存储位置;若不等,则所需查找的元素只能在中间元素以外的 前半部分或者后半部分中。然后再缩小的范围内继续进行相同的查找,如此重复直到找到为止,或者确认表中没有所 需查找的元素,则查找不成功,返回查找失败的信息。 实现代码: // 二分查找(...原创 2018-07-21 18:16:16 · 2834 阅读 · 1 评论 -
排序算法之插入排序
插入排序是一种简单直观的排序方法,基本思想:每次将一个待排序的记录,按其 关键字大小插入到前面已经 排好序的子序列中,直到全部记录插入完成。 插入排序分为直接插入排序、折半插入排序、希尔排序。 直接插入排序: public static int[] InsertSort(int[] array) { int[] newArray = Arrays.copyOf(array, arr...原创 2018-07-21 18:38:54 · 321 阅读 · 0 评论 -
排序算法之交换排序
交换,就是根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置。,基于交换的排序 算法有很多。以冒泡排序和快速排序举例。 冒泡排序: public static int[] bubbleSort(int[] array) { int[] newArray = Arrays.copyOf(array, array.length); for (int i = 0...原创 2018-08-23 17:49:48 · 1019 阅读 · 0 评论 -
排序算法之选择排序
选择排序的基本思想是:每一趟在后面n-i+1个待排序的元素中选取关键字最小的元素,作为有序子序列的第i 个元素,直到第n-1趟做完,待排序元素,只剩下一个,就不用再选择了。以简单选择排序和堆排序为例。 简单选择排序: public static int[] selectSort(int[] array) { int[] newArray = Arrays.copyOf(arr...原创 2018-08-23 19:18:13 · 768 阅读 · 0 评论 -
排序算法之归并排序
“归并”是将两个或两个以上的有序表组合成一个新的有序表。假定待排序表含有n个记录,则可以看成是n个 有序的子表,每个子表的长度为1,然后两两归并,得到n/2个长度为12或1的有序表;再两两归并,...如此重复, 直到合并成一个长度为n的有序表为止。这种排序方法称为2-路归并排序。 归并排序: (基于分治法) public void mergeSort(int[] a, int le...原创 2018-08-23 20:02:27 · 757 阅读 · 0 评论 -
排序算法之基数排序
基于排序是一种很特别的排序方法,它采用多关键字排序思想(即基于关键字各位的大小进行排序),借助 “分配”和“收集”两种操作对单逻辑关键字进行排序。基数排序又分为最高位优先(MSD)和最低位优先(LSD) 排序。 基数排序: public void sort(int[] array) { int max = 0; // 记录最大的数 for (int i=0; i<...原创 2018-08-23 20:15:35 · 1039 阅读 · 0 评论