![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
algorithm
一代键客
我是疯狂的搜索资料者
展开
-
冒泡排序
冒泡排序算法的原理如下: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 算法稳定性 冒泡排序就是把小的元素往前调...原创 2018-08-14 14:11:03 · 103 阅读 · 0 评论 -
基数排序
基数排序属于“分配式排序”,又称“桶子法”;时间复杂度是 O(nlog(r)m),r为所采取的基数,m为桶数;是一种稳定的排序算法;空间效率:需要额外的空间,典型的空间换时间的算法;算法步骤:第一步:循环每一个基;第二步:循环内部以一个基为依据,遍历待排序的数据集,将元素放入对应的桶中;第三步:遍历桶,将元素返回到待排序的数据集中。说明:基 => 被排序的...原创 2018-10-12 11:37:06 · 99 阅读 · 0 评论 -
在线性时间里查找集合中的第n大的数
思路: 采用改进快速排序的方式,首先选择一个比较数,通过一个排序,把比比较数大的数放到比较数的左边,比比较数小的数放在比较数的右边,时间是N;如果此时比较数的下标等于n,则比较数是第n大;如果此时比较数的下标大于n,则第n大的数在比较数的左边,我们在左边的集合采用上述方法进行查找,直到比较数的下标等于n;否则我们在右边的集合采用上述方法进行查找,直到比较数的下标等于n;时间复杂...原创 2018-09-12 11:19:18 · 313 阅读 · 0 评论 -
归并排序
归并:将两个有序的数组归并成一个更大的有序数组的过程。 归并排序:要将一个数组排序,可以先(递归的)将它分成两半分别排序,然后将结果归并起来。归并排序的最大特点就是它能够保证将任意长度为N的数组排序所需要时间和NlogN成正比;主要确定是它需要的额外的空间和N成正比。 自顶向下的归并排序: // 归并 public void merge(Com...原创 2018-08-13 16:59:29 · 208 阅读 · 0 评论 -
希尔排序
希尔排序的思想是使数组中任意间隔为h的元素都是有序的。这样的数组被称为h有序数组。换句话说,一个h有序数组就是h个互相独立的有序数组编制在一起组成的一个数组(如下图)。在进行排序的时候,如果h很大,我们能够将元素移动到很远的地方,为了实现更小的h有序创造方便,用这种方式,对于任意以1结尾的h序列,我们都能够将数组排序,这就是希尔排序。 实现希尔排序的一种方法就是对...原创 2018-08-13 15:41:07 · 11849 阅读 · 0 评论 -
插入排序
通常人们在整理桥牌的方法是一张一张的来,将每一张牌插入到其他已经有序的排中的适当位置。在计算机的实现中,为了给要插入的元素腾出空间,我们需要将其余所有元素在插入之前都向右移动一位,这种算法叫做插入排序。 public Comparable[] insertionSort(Comparable[] array) { // 从小到大排列 for (int i=1; i&l...原创 2018-08-13 13:57:07 · 206 阅读 · 0 评论 -
选择排序
选择排序是一种最简单的排序算法。首先,选出数组中最小(或最大)的元素,将它与数组中的第一个元素进行交换;然后,从剩下待排序的元素中找出最小(或最大)的元素,并将它与待排序的第一个元素进行交换;按照这种方法一直进行下去,直到整个数组排序完。 public void selectionSort(int[] array) { // 从小到大排列 for (int i=0; i...原创 2018-08-12 18:26:35 · 96 阅读 · 0 评论 -
伸展树 Splay Tree
在二叉搜索树的基础上加了每次访问的节点都会变为根节点伸展树 JAVA 实现1、节点定义 private static class SplayTreeNode<T extends Comparable<T>> { private T element; private SplayTreeNode<T> leftNode; private S...原创 2018-08-14 16:52:42 · 163 阅读 · 0 评论 -
AVL树
AVL树是最先发明的自平衡二叉查找树。特点:任何节点的左右子树的高度相差的绝对值(平衡因子)<=1 空树的高度为0 本身首先是一棵二叉搜索树 查找、插入和删除在平均和最坏情况下都是O(logn)。AVL树 JAVA 实现1、节点定义 private static class AVLTreeNode<T extends Comparable<T>&g...原创 2018-08-14 16:23:19 · 113 阅读 · 0 评论 -
快速排序
快速排序:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 快速排序是一种分治的排序算法。它将一个数组分成两个数组,将两部分独立地排序。快速排序和归并排序是互补的:归并排序将数组分成两个子数组分别排序,并将有序的子数组...原创 2018-08-14 15:34:59 · 229 阅读 · 2 评论 -
从n个不重复的整数中随机找出m个不重复的整数,要求时间和空间复复杂度都是O(m)
/** * 从n个不重复的整数中随机找出m个不重复的整数,要求时间和空间复复杂度都是O(m); * 方法一: 随机产生n个不重复的随机数放在一个数组中,然后以数组的下标为界生成一个随机数,然后根据这个随机数(下标地址)获取数值,然后跟前面取到的数值作比较,如果重复,就重新生产,直到取到n个不重复的数为止; * 方法二: 在方法一的基础上,每次将产生的随机数(下标)对应的值和数组的最后一个...原创 2019-09-18 16:11:14 · 899 阅读 · 0 评论