排序算法
MuyuXiaoxiang
这个作者很懒,什么都没留下…
展开
-
插入排序
插入排序:所谓插入排序,即是顺序选择未排序的数字,并将其移动已插入已经排好序的数字的相应位置下面是最初的写法:public class Insertion { public static boolean less(Comparable w, Comparable v)//若w<v则返回true { return w.compareTo(v) < 0; } public st...原创 2018-04-07 17:50:19 · 155 阅读 · 0 评论 -
优先队列
优先队列是0个或多个元素的集合,每个元素都有一个优先权或值,对优先队列执行的操作有1) 查找;2) 插入一个新元素;3) 删除。当访问元素时,具有最高优先级的元素最先删除(百度百科)。所以,每当插入数据时,我们都会利用堆来将数据进行排序,以方便读取并删除最大值。本代码中,用数组进行存储堆数据,插入数据时将数据存储在数组最后,然后在将其与父节点比较,若大于父节点,则与父节点交换,如此循环直至根节点为...原创 2018-04-14 19:39:03 · 223 阅读 · 0 评论 -
希尔排序
最近一直在看算法书,本博客的代码也是根据书上的算法所敲出的。今天在看希尔排序,因为插入排序如果后面的数据较小,则需要做的交换次数过多,严重减慢效率,因而有了希尔排序。什么是希尔排序呢?所谓希尔排序就是将数据分为h个组,对每个组单独进行插入排序,而后减小h,分为较少的组,并进行插入排序,如此循环直至h为1为止。而本算法中,对于h的取值尚不太明确为何如此取值,本算法中h的取值为1,4,13,40,12...原创 2018-04-09 21:56:40 · 616 阅读 · 0 评论 -
堆排序
堆排序是指利用二叉树将数据排序,因为是二叉树,所以所在位置为k的节点,其子节点分别在2k和2k+1处,父节点在k/2处(数组0处不存放数据)。进行堆排序,首先是利用下沉或者上浮构造有序堆,即树的根节点是最大值,然后将根节点与数组最后一个数据交换位置,然后再将最大值以前的数据利用下沉或者上浮构造有序堆即根节点最大,然后将之与最大值所在位置的前一个数据与根节点交换,如此循环即可实现数据由小到大排序。p...原创 2018-04-15 21:09:05 · 199 阅读 · 0 评论 -
排序算法
本文主要记载一些排序算法的特性:1.选择排序:选择排序每次从未排序的所有数据中通过比较,选出最小的数据,并将之与未排序数据中的第一个数据交换位置,然后继续按照此方法从剩余的数据中选择最小的数据,并按照上述方法处理,如此循环,直至所有数据排好序。特性:运行时间和输入无关。即:即使数组是有序的数组,但是它和随机无序数组的排序时间相同。 数据移动是最少的,总共用了N次交换。2.插入排序...原创 2018-04-11 21:48:10 · 177 阅读 · 0 评论 -
归并排序
归并排序因为涉及到递归,所以有点绕,难以处理吧,本算法的程序是参照《算法》一书,本人只是将其整理所得。public class Merge { private static Comparable[] assistant;//归并所需静态辅助数组 public static boolean less(Comparable w, Comparable v) { return w.compar...原创 2018-04-10 21:00:36 · 162 阅读 · 0 评论 -
快速排序
老规矩,今天继续看《算法》一书,今天学习的是快速排序,快速排序也好理解。就是为数组选取某个点作为切分点,使切分点左边的点都小于切分点,右边的点都大于切分点,然后按照上述方法对两个数组利用切分进行排序,如此递归直至最后无法切分为止。下面是参考书上整合的代码,不过在进行切分时有所更改,对切分代码这点也有点模糊了。public class Quick { public static boolean l...原创 2018-04-11 21:32:33 · 205 阅读 · 0 评论 -
选择排序
2018.4.7选择排序选择排序的思想:所谓选择排序,就是在一组数中,每次选择一个当前剩余数据中最小的数据,并将之与剩余数据中的第一个数据交换位置即可。即每次选择最小的数据放入最前面。第i次排序是从剩余的length-i+ 1个数据中选择最小的数据,并于数组索引为i-1的数据交换位置。public class Selection { public static boolean less(Comp...原创 2018-04-07 10:59:51 · 158 阅读 · 0 评论