
排序算法
取名很烂
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
双指针快速排序
思想同样去一个数位基准数进行递归分区,两个指针分别从头和尾开始遍历数据,如果头不大于基准数,尾不小于基准数则不改位置,否则尾数与头交换。实现思路两个循环,循环执行条件第一个是尾数不小于基准数,且尾下标大于头下标,第二个相反,如果结束则交换数。外层一个循环执行条件为头不大于尾。实现代码package sort;import java.util.Random;public class TPQuickSo原创 2017-11-06 20:58:03 · 590 阅读 · 1 评论 -
计数排序
思想:建一个数组,以原数组的值对应新建数组的坐标,新数组的值代表新数组坐标对应的原数组的值出现的次数,然后将新数组按顺序重新填回原数组,构成有序。实现思路:新建数组的大小以原数组max值+1为容量 遍历一遍原数组,将对应信息存入新建数组 遍历一遍新数组,将对应信息转为有序的数组存入原数组 一亿以内的一亿个随机数排序耗时: 3895毫秒; 计数排序适合数据规模较小,数据值较小的排序,计数排序是空间换时间思想原创 2017-10-25 17:56:28 · 205 阅读 · 0 评论 -
堆排序
思想堆的思想是顶点比后面的都小(大),所以将堆顶取出,然后修复再取出堆顶。 实现思路一、构建大顶堆/小顶堆{若只有一个元素则自动构成顶堆};从n/2-1开始修复; 将节点与较小的子节点对比,如果比子节点大,则子节点上浮,重复直到递归到堆顶修复完成后,堆就构成了;二、将堆顶与无序区的最后交换三、接着修复堆排可以取前n个构成一个排序的堆,然后从文件或其他地方去处一个个数与堆顶对比取出前n大原创 2017-10-24 19:04:24 · 174 阅读 · 0 评论 -
插入排序
思想:将一个数再已经有序的序列中找到自己的位子插入,在数组中选择有序序列的后一个数,并在有序部分从后往前遍历对比实现思路(小->大):第一个数只有一个数,已经有序 第二个数与第一个数比较,大则不操作,小则交换位置构成有序 第三个数及以后,从有序子序列往前比较,比前一个数小则交换位置,直到比前一个数大原创 2017-10-24 18:56:37 · 153 阅读 · 0 评论 -
桶排序
思想:将数据根据某种逻辑分为若干个bucket,在每个bucket中各自排序,然后将各个bucket根据之前的逻辑进行排序,构成有序。是分治法思想的体现。实现思路:建立一定长度的数组作为桶(可以是以区间||直接以数组长度),每个数组元素都是一个桶,桶中装的是链表;桶中链表的数据应该可以取整或者以其他区间的方式写入,后一种桶长度 则以值*数组长度/max+1;桶中以插入排序进行排序,需要与链表的头结点,中间节点原创 2017-10-24 18:55:06 · 188 阅读 · 0 评论 -
快速排序
思想取一个值作为基准,将比其大的放左边,小的放右边,利用分治法思想,将其分拆合并实现思路一、以第一个数作为基准数,从左侧开始扫描 二、第二个数及以后的数都与第一个数比较,如果比基准数小则放到小区,比基准数大则发放到大区 三、如果比基准数小,则替换离基准数最近的大数,如果比基准数大则不动 四、扫描完后,以基准数替换最后一个小区里的数实现代码package sort;import java.uti原创 2017-10-24 18:50:21 · 200 阅读 · 0 评论 -
基数排序
思想:将所有数字从最低位(最高位)开始,每个数相同位比较排序,然后再排下一位,当所有数的所有位都比较结束时,构成了有序。实现思路:一、初始化ArrayList长度为10;对应0~9,作为桶,桶内数据不排序 二、当取到最高位数是停止循环,也就是当所有数据归到0这个桶里时 三 、所有数进桶,根据相应的位的数映射相应的桶 四、所有数据进桶后,使用辅助数组复制所有桶,并清空桶中所有数据,准备下一次入桶。原创 2017-10-24 18:48:07 · 172 阅读 · 0 评论 -
冒泡排序
冒泡排序:相邻的两个数字比较,如果后一个数比前一个数小则交换位置,进行n次比较,最终成为有序。类似水中气泡上浮的动作,用双重循环:外层循环控制遍历的次数,内层循环中比较相邻两个数,若前数比后数大,则交换位置 时间复杂度:O(n^2)原创 2017-10-24 18:33:49 · 170 阅读 · 0 评论 -
选择排序
思想选出最大(最小)的数,将该数字与无序区的最后(最前)的数交换。最终达到有序实现思路使用双重for循环,依次遍历找出无序区 的最大(最小)值。实现代码package sort;import java.util.Random;/** * 831833 * @author 28374 * */public class SelectSort { /** * 选择排序:选出数原创 2017-11-06 21:00:34 · 155 阅读 · 0 评论 -
希尔排序
思想:取一定的间隔作为增量,并逐渐增大增量使其合并逐渐构成相对有序的序列,直到完全有序实现思路使用三重for循环,最外层控制增量,里面两层为插入排序实现代码package sort;import java.util.Random;public class ShellSort { /** * 希尔排序:取一定的间隔作为增量,并逐渐增大增量使其合并逐渐构成相对有序的序列,直到完全有序原创 2017-11-06 20:59:01 · 136 阅读 · 0 评论 -
归并排序
思想:使用分治思想,所有数据拆分成小的,然后在小范围内排序,再合并调整。实现思路:一、通过递归将数据拆分,直到不可拆分 二、在小范围内合并,构成相对有序 三、递归合并,最终构成有序原创 2017-10-25 17:58:23 · 217 阅读 · 0 评论