算法
漫步夕阳下
临渊羡鱼,不如退而结网
展开
-
排序算法-冒泡排序及优化(Java实现)
冒泡排序冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。1.1 算法描述比较相邻的元素。如果第一个比第二个大,就交换它们两个; 对每一对相邻元素作同样的工作,从开始第一对到结尾的最...原创 2019-07-09 11:11:55 · 314 阅读 · 0 评论 -
排序算法-选择排序(Java实现)
选择排序表现最稳定的排序算法之一,因为无论什么数据进去都是O(n2)的时间复杂度,所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。理论上讲,选择排序可能也是平时排序一般人想到的最多的排序方法了吧。概念:选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余...原创 2019-07-10 09:59:17 · 297 阅读 · 0 评论 -
排序算法-希尔排序(Java实现)
希尔排序希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是直接插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。希尔排序是把记录按下表的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每...原创 2019-07-15 08:32:26 · 142 阅读 · 0 评论 -
排序算法-插入排序 及其优化-折半插入排序(java实现)
插入排序(Insertion Sort)插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。算法描述...原创 2019-07-11 10:13:36 · 315 阅读 · 0 评论 -
排序算法-归并排序及其优化(Java实现)
归并排序归并排序(merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法的一个非常典型的应用。作为一种典型的分而治之思想的算法应用,归并排序的实现有两种方法:自上而下的递归(所有递归的方法都可以迭代重写,所以有了下面第二种) 自下而上的迭代和选择排序一样,归并排序性能不受输入数据的影响,但表现比选择排序好得多,因为始终都是O(nlogn)的时间复杂度,代价是需...原创 2019-07-16 09:41:32 · 1014 阅读 · 0 评论 -
排序算法-快速排序之普通快排、双轴快排、三轴快排 另外关于挖坑实现快排的效率问题(java实现)
快速排序基本思想通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据要小,然后再按此方法对着两部分数据分别快排。整个排序过程可以递归进行,以此达到数据变为有效序列。假设要排序的数组为A[0],A[1].....A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比他小的数都放到它左边,所有比它大的数都放到它右边,这个过...原创 2019-07-18 13:40:45 · 1487 阅读 · 0 评论 -
排序算法-堆排序(java实现)
堆排序(heapsort)是指利用堆这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆与小根堆。是完全二叉树。满二叉树与完全二叉树满二叉树:除了叶子节点之外的每一个节点都有两个孩子,并且所有的叶子都在同一层上,这样的二叉树称为满二叉树。1.叶子节点只能出现在最下一层,出现在其他层就不可能达成平衡。 2.非叶子节点的度一定是2(...原创 2019-07-19 10:56:49 · 148 阅读 · 0 评论