![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
十大排序算法
未来谁可知
这个作者很懒,什么都没留下…
展开
-
基数排序跟桶排序的渊源
基数排序跟桶排序的渊源 引言 其实基数排序和桶排序很像,但是基数排序多了一部就是以个位数先入桶,这样做的好处是在个位数上比如23 25,23肯定会在25前面,在这一步上,桶排序是不管三七二十一先入大范围然后用排序法,这样不稳定,因为取决于内部排序法的空间和时间 先看一下基数排序的顺序 其实就是先以个位数入桶然后在桶排序出桶,避免了桶排序的内部排序 代码实现 package 基数排序; ...原创 2020-04-22 13:35:00 · 206 阅读 · 0 评论 -
桶排序-超级容易上手的一种排序
桶排序 其实就是划分区间,以区间为桶,每个桶贴个范围(下面那个59是50,写错了) 以每个自己的桶范围,放入范围的数字就可以了 那么如何确定我们的桶范围还有桶数组的大小呢? 首先我们传进来 arr.length=7 我们可以通过最大值最小值确定桶数组长度 // 计算桶的数量 int bucketNum = (max - min) / arr.length + 1; 算出来(50-12)/7+...原创 2020-04-22 12:10:17 · 261 阅读 · 0 评论 -
计数排序比log(n)还快的排序
推荐这篇漫画讲计数排序 漫画传送门 思路: 计数排序说到底就是利用了三个数组来进行换位,中间数组为索引数组 索引数组是根据原始数组的值当做索引数组的下标,如果原始数组值重复,那么下标也会重复,那就对索引下标对应的数组值进行++,代表这个索引对应的值有几个 然后要把索引数组的值全部等于前面数之和 最后就是输出数组的值就是根据索引数组的值当作输出数组的下标,而索引数组的下标对应着原始数组的值,这样就...原创 2020-04-21 14:02:11 · 212 阅读 · 0 评论 -
看完对选择排序无压力
选择排序 排序原理 每行比较比出最小的值,然后放在头节点,每次找到比自己小的值时记录最小的值 然后下标右移继续在length-1个中又重复第一步 比较图 代码实现 package 选择排序; public class Select { /*对数组a中的元素进行排序 * */ public static void sort(Comparable[] a) { f...原创 2020-04-21 08:11:56 · 119 阅读 · 0 评论 -
希尔排序的一些小知识
希尔排序 一种间隔排序算法,大致就是从粗间隔到细间隔的排序过程 思路: 先看下面几幅图 都是有个细线的间隔,从粗到细为1的间隔 起始的h间隔(最粗间隔) while(h<a.length/2) { h=2*h+1;//3,,7 } 控制着间隔排序,每个间隔上划分为组来排序 for (int j = i; j >=h; j-=h) { //待插入...原创 2020-04-19 14:25:07 · 179 阅读 · 0 评论 -
收获插入排序三步曲
插入排序 何为插入,就是在一个地方插入一个数字 思路: 观上图就知道从头遍历的数首先比前面小的会进行比较,直到比前面的数大,就开始插入 在为插入做准备而进行的比较时我们要进行换位置,通俗来讲就是比当前数大的都往后移一格 会发现当前数的前面可以看作是一个递增数组 这下我们知道插入是什么了吧,坦白来讲: 就是插入比前面小的数字到前面去嘛,而插入的原理则是,大的数往后移动,然后给当前数腾一个位置出...原创 2020-03-22 22:57:20 · 102 阅读 · 0 评论 -
最简单也是程序员必会的冒泡排序
冒泡排序 思想: 就是两两交换,比如我们升序排列,那么就要大的放在后面,所以两两比较然后大的就换一下位置 如果只是一层循环的话,只能比较出最大的数字然后排到最后,所以还需要外层一个循环 比较是两两比较所以比较次数肯定是length-1 Test.java package 冒泡排序; public class Test { public static void main(String[] a...原创 2020-03-22 22:30:16 · 127 阅读 · 0 评论 -
令人头疼的堆排序简单化解
堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。 堆排序从理解程度就不好理解,所以并不推荐使用堆排序,但是这里作为了解 堆排序分为小顶堆和大顶堆 概念: 小顶堆就是把最小的值放到头节点,每个节点值都比子树小 大顶堆则和小顶堆相反,每个节点值都比子树大 小堆顶就是不停把小的放上去 ...原创 2020-03-19 11:33:23 · 102 阅读 · 0 评论 -
用分治思想理解归并排序
分治思想 分治就是把打的问题转成一个个小问题解决,然后把每个小问题的答案合并到一起就解决了大问题 分阶段可以理解为就是递归拆分子序列的过程,递归深度为log2n。 思路: 可以说看了上图就秒懂了,把一个数组拆分成每一个具体的值,然后再两两合并并排序,到最后再把两大块合并成一个就是归并了 代码实现: ...原创 2020-03-08 10:45:58 · 142 阅读 · 0 评论 -
每日一提:三分钟理解的快速排序
简单原理 快速排序是给定一个基准值然后进行比较小于他和大于他的数, 小于他的数放左边,大于他的放右边 然后再以他的左边为整体,再选出一个基准值,然后重复①②直到左边为一个数就不用排序了,右边也如此 为了不纠结基准值,默认就选择第一个, 两个指针作为辅助,一个left,一个right,最左和最右,交替比较(如果left小就移动指针继续判断left,right大就移动right) 但是如果left大...原创 2020-03-06 10:18:37 · 292 阅读 · 0 评论