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