java中三路快速排序的实现
摘要:当我们要排序数组中存在大量的重复的数据。如果我们将分割后数组分成三部分,即arr[0,1,2~l]< v, arr[l+1,r]=v,arr[r+1...arr.length-1]>v.我们可以将等于v数组直接过滤调,这样当存在大量的重复数组的时候,性能能够大幅度提高。 下面是三路快速排序的Java
阅读全文
posted @
2018-09-02 16:11
蔡苗
阅读(460)
推荐(0)
java双路快速排序的实现
摘要:为什么要有双路快速排序?当要排序的数组有大量的重复的话,如果只是单路的话,大量的重复值会在两个分割数组中其中的一个,这样在极端情况下退化成O(n^2)级别,对排序性能有较大的影响。当要排序的数组存在大量的重复值的时候,我们可以采取双路法进行快速排序。即两个指针移动,一端比分界值小就继续移动,一端比分
阅读全文
posted @
2018-08-30 00:04
蔡苗
阅读(447)
推荐(0)
随机化快速排序法
摘要:为什么要有随机化快速排序。对于快速排序大家知道,如果选取某个固定的值作为分界点(左边小于当前值,右边大于当前值),当排序的数组近乎有序,极有可能退化成O(n^2)级别的算法,因为拆分的数组极不均匀,两边的数组大小相差太大。如果采取随机化选取分界点,这样的化退化成O(n^2)几乎为零。
阅读全文
posted @
2018-08-29 23:04
蔡苗
阅读(1162)
推荐(0)
快速排序的Java实现
摘要:快速排序(Quicksort)是对冒泡排序的一种改进。 快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以
阅读全文
posted @
2018-08-29 22:22
蔡苗
阅读(171)
推荐(0)
java归并排序自底向上实现:
摘要:描述: 自底向上的归并排序算法的思想就是数组中先一个一个归并成两两有序的序列,两两有序的序列归并成四个有序的序列,然后四个有序的序列归并八个有序的序列,以此类推,直到,归并的长度大于整个数组的长度,此时整个数组有序。需要注意的是数组按照归并长度划分,最后一个子数组可能不满足长度要求,这个情况需要特殊
阅读全文
posted @
2018-08-27 23:51
蔡苗
阅读(582)
推荐(0)
Java实现归并排序
摘要:百度百科:归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 归并操
阅读全文
posted @
2018-08-27 22:57
蔡苗
阅读(10419)
推荐(0)
栈的经典运用-求值数学表达式
摘要:用栈来求数值表达式。首先来分析表达式由括号、运算符合操作数组成。我们可以根据以下4种情况从左到右逐个将这些实体送入栈处理: 1.将操作数压入操作数栈。 2.将运算符压入运算符栈。 3.忽略左括号 4.在遇到右括号时,弹出一个运算符,弹出所需数量的操作数,并将运算符和操作数的运算结果压入操作数栈。 在
阅读全文
posted @
2018-07-03 13:51
蔡苗
阅读(288)
推荐(0)
java中Stack的源码解析
摘要:栈是一种基于后进先出的数据结构。实现的栈的方式有数组和链表两种数据结构。下面我们来看看java中的Stack源码解析。 //Stack栈继承了 Vector方法,Vector方法是内部是数组实现的,即java中Stack 也是通过数组实现的。下面我们看看Stack如何通过Vector中的方法实现先进
阅读全文
posted @
2018-07-03 10:53
蔡苗
阅读(196)
推荐(0)
java-背包的实现
摘要:背包的定义: 背包是一种不支持从中删除元素的集合数据类型--它的目的就是帮助用列收集元素并迭代遍历所有收集到的元素(用列也可以检查背包是否为空或者获取背包中元素的数量)。迭代的顺序不确定且与用例无关。 背包的java代码的实现: package com.learn.bag;import java.u
阅读全文
posted @
2018-07-03 09:25
蔡苗
阅读(365)
推荐(0)
AVLTree的Java实现
摘要:package com.learn.tree.demo2; /** * AVL树又叫做平衡二叉树。 AVL树的前提是二叉树(BST或叫做二叉搜索树) * 由于在生成BST树的过程中可能会出现线性树结构。比如插入的顺序是:1,2,3,4,5,6n * 二叉搜索树就会退化为链表(线性机构),此时所搜的时
阅读全文
posted @
2018-02-06 15:15
蔡苗
阅读(222)
推荐(0)
基于java几种常见排序的实现及优化
摘要:package com.learn.sort; /** * 基本排序--选择排序 冒泡排序 插入排序 希尔排序 * * 下面所有的排序默认为升序 */public class BaseSort { /** * 选择排序 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是
阅读全文
posted @
2018-01-16 14:09
蔡苗
阅读(203)
推荐(0)
java-二分查找树的实现
摘要:package com.learn.tree.demo2; import java.util.LinkedList;import java.util.Queue; /** * 二分查找树BST(也叫二叉查找树、二叉排序树)的提出是为了提供查找效率, * 之所以称为二分查找树,因为该二叉树对应着二分查
阅读全文
posted @
2018-01-08 19:55
蔡苗
阅读(421)
推荐(0)
二分查找法-java实现
摘要:package com.learn.tree.demo2; /** * 二分查找法( binary search) 二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好,占用系统内存较少; * 其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列
阅读全文
posted @
2018-01-06 10:36
蔡苗
阅读(183)
推荐(0)
手写LinkedList
摘要:package com.learn.list; import java.util.AbstractSequentialList;import java.util.Collection;import java.util.ConcurrentModificationException;import ja
阅读全文
posted @
2017-12-10 22:51
蔡苗
阅读(127)
推荐(0)
手写ArrayList
摘要:package com.learn.list; import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;import java.util.AbstractList;i
阅读全文
posted @
2017-12-04 18:50
蔡苗
阅读(171)
推荐(0)
算法与数据结构-线性篇
摘要:java中数组在内存空间中连续的,可以通过内存地址迅速获得该元素。数组的实现可以使得printList以线性时间被执行,而findKth操作则花费常数时间,这正是 我们所能够预期的。不过,插入和删除的花费却潜藏着昂贵的开销,这是要插入发生的位置。最坏的情况下,在位置0的插入首先需要将整个数组后一个位
阅读全文
posted @
2017-12-02 20:09
蔡苗
阅读(157)
推荐(0)