数据结构
D丶晓
这个作者很懒,什么都没留下…
展开
-
排序-快速排序之随机选取基准法
思想:基本的快速排序选取第一个或者最后一个元素作为基准。这样在数组已经有序的情况下,每次划分将得到最坏的结果。一种比较常见的优化方法是随机化算法,即随机选取一个元素作为基准。这种情况下虽然最坏情况仍然是O(n2),但最坏情况不再依赖于输入数据,而是由于随机函数取值不佳。实际上,随机化快速排序得到理论最坏情况的可能性仅为1/(2n)。所以随机化快速排序可以对于绝大多数输入数据达到O(nlogn)的期...原创 2019-02-24 13:06:18 · 2838 阅读 · 2 评论 -
排序-快速排序之三分取中法
思想:引入的原因:虽然随机选取枢轴时,减少出现不好分割的几率,但是还是最坏情况下还是O(n^2),要缓解这种情况,就引入了三数取中选取枢轴分析:最佳的划分是将待排序的序列分成等长的子序列,最佳的状态我们可以使用序列的中间的值,也就是第N/2个数。可是,这很难算出来,并且会明显减慢快速排序的速度。这样的中值的估计可以通过随机选取三个元素并用它们的中值作为枢纽元而得到。事实上,随机性并没有多大的帮助...原创 2019-02-24 13:03:54 · 1723 阅读 · 0 评论 -
排序-快速排序的优化(三分取中法实现)
优化一:当待排列序列的长度分割到一定大小时,使用插入排序原因:对于很小和部分有序的数组,快排不如插入排序好。当待排序序列的长度分割到一定大小后,继续使用分割的效率比插入排序要差; 但是三分取中+插入排序还不能处理重复数组;优化二:聚集相同基准法;处理重复的数组元素原因:在一次分割结束后,可以把与par相等的元素聚集在一起。下次分割时,不用在对和par相等元素进行分割举例:待排序序列 1 ...原创 2019-02-24 13:03:39 · 860 阅读 · 0 评论 -
排序-快速排序之固定位置选取基准法(递归/非递归)
快速排序 固定位置选取排序:数据越有序,复杂度越高 随机选取基准排序 请点击查看 三分取中法 请点击查看 基于三分取中法的几种优化 请点击查看快速排序(递归):好:0(nlog2n), 坏:O(n2). 空间复杂度O(nlog₂n) 不稳定好情况:Partition 每次都划分得很均匀。坏情况:当待排序数组是正序或者逆序的时候。(退化成选择排序了)平均时间复杂度...原创 2019-02-24 13:14:14 · 722 阅读 · 0 评论 -
排序-堆排序(heapSort)
时间复杂度:O(nlog₂n) 空间复杂度:O(1) 不稳定把此序列对应的二维数组看成一个完全二叉树。那么堆的含义就是:完全二叉树中任何一个非叶子节点的值均不大于(或不小于)其左,右孩子节点的值。 由上述性质可知大顶堆的堆顶的关键字肯定是所有关键字中最大的,小顶堆的堆顶的关键字是所有关键字中最小的。因此我们可使用大顶堆进行升序排序, 使用小顶堆进行降序排序。基本思想:此处以大顶堆为例,堆...原创 2019-02-24 13:20:03 · 193 阅读 · 0 评论 -
排序-归并排序(二路归并)
时间复杂度:O(nlog₂n) 空间复杂度:O(n) 稳定;思路:归并排序是建立在归并操作上的一种有效的排序算法,是采用分治法的一个典型应用; 即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。public class MergeSort { public static void main(String[] args) { R...原创 2019-02-24 13:25:33 · 371 阅读 · 0 评论 -
七大排序整理(选择排序/直接插入排序/shell(希尔)排序/冒泡排序/快速排序/堆排/归并排序)
选择排序 :请看后文 直接插入排序 : 请看后文 shell排序 : 请看后文 冒泡排序 : 请看后文 快速排序 快速排序请点此链接 堆排 堆排请点此链接 归并排序 归并排序请点此链接各种排序性能对比如下:排序类型平均情况最好时间复杂度最坏时间复杂度空间复杂度稳定性选择排序O(n²)O(n²)O(n²...原创 2019-02-24 13:30:19 · 252 阅读 · 0 评论