![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
sort
往者之不谏
剑未配好,出门便是江湖
展开
-
选择排序
选择排序是一种基本的排序算法,它每次选出最小的值放到数组的前面,比较简单,API如下 public void sort(Comparable[] a) //对a进行从小到大的排序 public void exch(Comparable[] a,int i, int j) //交换i和j的位置 public boolean less(Comparable p,Comp...原创 2018-08-11 18:05:37 · 90 阅读 · 0 评论 -
堆排序
堆排序介绍: 堆排序可以分为两个阶段。在堆的构造阶段,我们将原始数组重新组织安排进一个堆中;然后在下沉排序阶段,我们从堆中按顺序取出所有元素并得到排序结果。 1.堆的构造,一个有效的方法是从右到左使用sink()下沉函数构造子堆。数组的每个位置都有一个子堆的根节点,sink()对于这些子堆也适用,如果一个节点的两个子节点都已经是堆了,那么在该节点上调用sink()方法可以把他们合并成一个堆。我...原创 2018-10-18 14:25:38 · 117 阅读 · 0 评论 -
二叉堆实现优先队列
适用范围: 许多应用程序都需要处理有序的元素,但不一定要求它们全部有序,或是不一定要一次就将它们排序。很多情况下我们会搜集一些元素,处理当前键值最大的元素等操作。 优先队列实现原理: 1.数据结构二叉堆能够很好地实现优先队列的基本操作。在二叉堆的数组中,每个元素都要保证大于等于另两个特定位置的元素。相应的,这些位置的元素又至少要大于等于数组中的另外两个元素。 2.根节点是堆有序的二叉树中的...原创 2018-10-18 12:54:39 · 284 阅读 · 1 评论 -
letcode 颜色分类
题目描述: 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 注意: 不能使用代码库中的排序函数来解决这道题。 示例: 输入: [2,0,2,1,1,0] 输出: [0,0,1,1,2,2] 进阶: 一个直观的解决方案是使用计数排序...原创 2018-09-11 14:28:40 · 386 阅读 · 0 评论 -
快速排序
快速排序是一种很长用的排序方法,它的基本原理就是从一组数中找出一个数,使这个数的左边都是小于这个数的,这个数的右边都是大于这个数的,通过这个数把数组分为两份,以此类推可以得到一个升序排列的数组。 代码实现: public class Quick{ public static void sort(Comparable[] a){ sort(a,0,a.length-1...原创 2018-08-12 18:28:19 · 82 阅读 · 0 评论 -
自底向上的归并排序
自底向上的归并排序和自顶向下的归并排序差不多,基本思想都是利用分治。需要注意的是管理好每次排序的lo,mid.hi的值 具体实现: public class Merge{ private Comparable[] aux; //排序 public static void sort(Comparable[] a){ aux = new Comparable...原创 2018-08-12 15:16:33 · 203 阅读 · 0 评论 -
自顶向下的归并排序
归并排序,要将一个数组排序,可以先将它分成两半分别排序,然后将结构归并起来。 具体实现如下 public class Merge{ private Comparable[] aux;//辅助数组 public static void sort(Comparable[] a){ aux = new Comparable[a.length]; s...原创 2018-08-12 14:43:11 · 247 阅读 · 0 评论 -
希尔排序
对于大规模乱序数组插入排序很慢,因为它只会交换相邻的元素,因此元素只能一点一点地从数组的一端移到另一端。例如,如果主键最小的元素在数组的尽头,要将它移到正确的位置就需要N-1次移动。希尔排序为了加快速度简单的改进了插入排序,交换不相邻的元素以对数组的局部进行排序,并最终用插入排序将局部有序的数组排序。 具体实现: public class Shell{ //将a按升序排列 ...原创 2018-08-12 14:00:30 · 90 阅读 · 0 评论 -
插入排序
插入排序也是一种基本的排序算法,当前索引左边的元素都是有序的,但它们的最终位置还不确定,为了给更小的元素腾出空间,它们可能随时移动。但当索引到达数组的右端时,数组排序就完成了。 代码实现 public class Inserted{ //插入排序的实现 public static void sort(Comparable [] a){ for(int...原创 2018-08-11 18:19:06 · 122 阅读 · 0 评论 -
二分查找
二分查找是一种对有序数组的一种很快的查找方式,用二分查找去查找一个n长度的数组最多需要logn步,它是每次从数组的中间开始查找,每次排除一半的数。 二分查找的流程如下: 具体代码实现: public static int binary_search(int[] nums,int item){ int lo = 0; int hi = nums.length-1; ...原创 2019-03-04 09:36:47 · 159 阅读 · 0 评论