![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 69
姜小衰
这个作者很懒,什么都没留下…
展开
-
[java] 快速排序
package com.yune.demo;import java.util.Arrays;public class QuickSort2 { public static void main(String[] args) { int[] arr = {2,1,4,6,9,20,11}; quickSort(arr, 0, arr.length - 1);原创 2017-03-06 23:01:55 · 212 阅读 · 0 评论 -
二叉搜索树
前言搜索树数据结构支持许多动态集合操作,包括SEARCH, MINIMUM, MAXIMUM, PREDECESSOR, SUCCESSOR, INSERT和DELETE等。因此,我们使用一棵搜索树既可以作为一个字典又可以作为一个优先队列。二叉搜索树上的基本操作所花费的时间与这棵树的高度成正比。对于有n个结点的一棵完全二叉树来说,这些操作的最坏运行时间为Θ(lgn)。然而,如果这棵树是一条原创 2017-05-06 23:42:19 · 808 阅读 · 0 评论 -
[数据结构] 直接寻址表
当关键字的全域U比较小时,直接寻址是一种简单而有效的技术。假设某应用要用到一个动态集合,其中每个元素都是取自全域U={0, 1, …, m - 1}中的一个关键字,这里m不是一个很大的数。别外,假设没有两个元素具有相同的关键字。为表示动态集合,我们用一个数组,或称为直接寻址表(direct-address table),记为T[0..m-1]。其中每个位置,或称为槽(slot),对应全域U中的一个关原创 2017-05-04 14:07:01 · 829 阅读 · 0 评论 -
[数据结构] 散列表
许多应用都需要一种动态集合结构,它至少要支持INSERT、SEARCH和DELETE字典。例如,用于程序语言编译的编译器维护了一个符号表,其中元素的关键字为任意字符串,它与程序中的标识符相对应。散列表(hash table)是实现字典操作的一种有效数据结构。尽管最坏情况下,散列表中查找一个元素的时间与链表查找的时间相同,达到了Θ(n)。然而在实际应用中,散列查找的性能是极好的。在一些合理的假设下,原创 2017-05-04 12:47:03 · 452 阅读 · 0 评论 -
[数据结构] 链表
简介链表(linked list)是一种这样的数据结构,其中的各对象按线性顺序排列。数组的线性顺序是由数组下标决定的,然而与数组不同的是,链表的顺序是由各个对象里的指针决定的。链表为动态集合提供了一种简单而灵活的表示方法,并且能支持10.1节中列出的所有操作(但未必非常有效)。 如图10-3所示,双向链表(doubly linked list)L的每个元素都是一个对象,每个对象有一个关键字key和原创 2017-05-04 07:49:41 · 530 阅读 · 0 评论 -
[数据结构] 栈与队列
栈和队列栈和队列都是动态集合,且在其上进行DELETE操作所移除的元素是预先设定的。在栈(stack)中,被删除的是最近插入的元素:栈实现的是一种后进先出(last-in, first-out, LIFO)策略。类似地,在队列(queue)中,被删去的总是在集合中存在时间最长的那个元素:队列实现的是一种先进先出(first-int, first-out,FIFO)策略。在计算机上实现栈和队列有几种有原创 2017-05-04 06:46:21 · 407 阅读 · 0 评论 -
[数据结构] 二叉堆,堆排序,优先级队列
前言最近在看算法导论中的第六章堆排序,忍不信手又痒了起来,利用零散时间,参照书里的思路,利用java实现了一些堆的基本操作,供小白参考。有时间会整理堆的介绍和一些性质,这事后话。我也是菜鸟一个,代码中难免有bug,也请大手子交流与指出源码package com.jianglei;import java.util.ArrayList;import java.util.List;/** * 参照算法原创 2017-04-29 10:45:07 · 719 阅读 · 0 评论 -
[算法 java] 选择排序selectSort
算法描述首先,找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)。再次,在剩下的元素中找到最小元素,将它与数组的第二个元素交换位置。如此往复,直到将整个数组排序。例子以下面5个无序的数据为例: 56 12 80 91 20(文中仅细化了第一趟的选择过程) 第1趟:12 56 80 91 20 第2趟:12 20 80 91 56第原创 2017-04-20 15:21:01 · 710 阅读 · 0 评论 -
[排序] 计数排序
简介计数排序假设n个输入元素中的每一个都是在0到k区间内的一个整数,其中k为某个整数。当k = O(n)时,排序的运行时间为Θ(n)。 计数排序的基本思想是:对每一个输入元素x,确定小于x的元素个数。利用这一信息,就可以直接把x放到它在输出数组中的位置上了。例如,如果有17个元素小于x,则x就应该在第18个输出位置上。当有几个元素相同时,这一方案要略做修改。因为不能把它们放在同一个输出位置上。原创 2017-05-02 08:08:44 · 555 阅读 · 0 评论 -
[数据结构] 树
简介树(Tree)是n(n>=0)个结点的有限集。在任意一棵非空树中有且仅有一个特定的称为根(Root)的结点当n > 1时,其余结点可分为m(m > 0)个互不相交的有限集T1,T2,…,Tm,其中每个集合本身又是一棵树,并且称为根的子树(SubTree)。例如,下图 是只一个根结点的树 上图(b)是有13个结点的树,其中A是根,其余结点分成3个互不相交的子集:T1 = {B, E原创 2017-04-30 15:43:54 · 348 阅读 · 0 评论 -
[java]直接插入排序
import java.util.Arrays;public class InsertSort { public static void main(String[] args) { int[] arr = {9, 2, 5, 3, 10}; int[] arr2 = {5, 6, 9, 3, 10}; insertSort(arr);原创 2017-03-07 08:19:23 · 228 阅读 · 0 评论 -
[java] 二分法查找
首先上二分法java实现的代码import java.util.Arrays;public class BinarySearch { public static int rank(int key, int[] a) { //数组必须是有序的 int lo = 0; int hi = a.length - 1; while(lo原创 2017-03-04 12:25:49 · 374 阅读 · 0 评论 -
[python] 冒泡排序
def bubble_sort(lst): l = len(lst); # 计算列表长度 for i in range(0, l - 1): # 趟循环 state = True # 设置状态为True for j in range(0, l - i - 1): # 每趟循环中挑选最大值 if lst[i] > lst[i +原创 2017-03-06 09:01:29 · 287 阅读 · 0 评论 -
[数据结构] 二叉搜索树 前驱和后继的经验总结
前言最近在看算法导论关于二叉搜索树的相关章节,关于其前驱和后继的小节,我想了好久,总结出了一点经验,想分享给大家,也是怕过一段时间自己忘记了,因此记录在此。后继假设x为当前节点 y为x的后继结点 总结为四种情况x节点右节点不为NIL时 寻找x右子树中最小的节点 x节点右节点的左节点为NIL时,y为x.right 图(a)x节点右节点左子树不为NIL时,在左子树中寻找最小的节点 图(b)哎另原创 2017-05-08 14:35:30 · 3921 阅读 · 4 评论