随笔分类 -  数据结构与算法

摘要:一、引言 顾名思义,快速排序是实践中的一种快速排序算法,在C++或对Java基础类型的排序中特别有用。它的平均运行时间是O(NlogN);但最坏情形性能为O(N2)。我会先介绍快速排序过程,再讨论如何优化。 二、快速排序(quicksort) 算法思想: 采用分治法,将数组分为两部分,并递归调用。将 阅读全文
posted @ 2019-05-05 09:47 9龙 阅读(4706) 评论(4) 推荐(1) 编辑
摘要:一、引言 我们知道,java中泛型排序使用归并排序或TimSort。归并排序以O(NlogN)最坏时间运行,下面我们分析归并排序过程及分析证明时间复杂度;也会简述为什么java选择归并排序作为泛型的排序算法。 二、图解归并排序过程 算法思想:采用分治法: 分割:递归地把当前序列平均分割成两半。 集成 阅读全文
posted @ 2019-04-29 15:00 9龙 阅读(1725) 评论(0) 推荐(0) 编辑
摘要:一、引言二、图解堆排序(heapsort)三、java代码实现及时间复杂度分析四、总结 一、引言 优先队列可以用于以O(NlogN)时间排序,正如上一篇的求解topK问题中用到的思想一样,这种思想就是堆排序(heapsort)。 二、图解堆排序(heapsort) 算法思想:通过将数组元素进行bui 阅读全文
posted @ 2019-04-27 11:10 9龙 阅读(740) 评论(0) 推荐(0) 编辑
摘要:在原来基础上增加了算法E。 一、引言 ​ 这就是类似求Top(K)问题,什么意思呢?怎么在无序数组中找到第几(K)大元素?我们这里不考虑海量数据,能装入内存。 二、普通算法 算法A: 将数组中的元素升序排序,找到数组下标k 1的元素即可。这是大家最容易想到的方法,如果使用简单排序算法,时间复杂度为O 阅读全文
posted @ 2019-04-26 22:28 9龙 阅读(2075) 评论(0) 推荐(0) 编辑
摘要:一、队列与优先队列的区别 队列是一种FIFO(First In First Out)先进先出的数据结构,对应于生活中的排队的场景,排在前面的人总是先通过,依次进行。 优先队列是特殊的队列,从“优先”一词,可看出有“插队现象”。比如在火车站排队进站时,就会有些比较急的人来插队,他们就在前面先通过验票。 阅读全文
posted @ 2019-04-19 22:02 9龙 阅读(8248) 评论(0) 推荐(3) 编辑
摘要:引言: 前面详解了如何优化冒泡排序?,图解选择排序与插入排序,这些简单排序算法平均时间复杂度都是O(n^2)。希尔排序是第一批打破二次时间屏障的算法之一。下面我们来分析为什么希尔排序可以打破二次时间复杂度。 一、分析简单排序算法的下界 逆序:具有性质i < j但 a[i] > a[j]的 阅读全文
posted @ 2019-04-16 21:06 9龙 阅读(1498) 评论(3) 推荐(1) 编辑
摘要:上一篇详述了冒泡排序及其优化,有兴趣的可以看看: 如何优化冒泡排序? 一、选择排序(SelectionSort) 算法思想:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 阅读全文
posted @ 2019-04-15 15:06 9龙 阅读(11842) 评论(1) 推荐(2) 编辑
摘要:一、冒泡排序(BubbleSort) 基本思想:从左到右使用相邻两个元素进行比较,如果第一个比第二个大,则交换两个元素。这样会使较大数下沉到数组的尾端,即较小数像泡泡一样冒到数组首端。 排序过程: 比较相邻两个元素,如果第一个比第二个大,则交换两个元素; 从左到右依次比较,直到最大数位于数组尾端; 阅读全文
posted @ 2019-04-14 14:38 9龙 阅读(2022) 评论(0) 推荐(4) 编辑

点击右上角即可分享
微信分享提示