排序算法
文章平均质量分 65
EmilyGnn
这个作者很懒,什么都没留下…
展开
-
归并排序
归并排序要将一个数组排序,可以先(递归地)将它分成两半分别排序,然后将结果归并起来。 实现归并的一种最直接的方法:将两个不同的有序数组归并到第三个数组中。但是,由于我们需要进行很多次归并,在每次归并时都要创建一个新数组来存储。 所以我们希望有个能在原地归并的方法,这样就可以先将前半部分排序1. 原地归并的抽象方法//插入排序,将a[]按升序排列public void insert...原创 2018-07-17 14:14:07 · 677 阅读 · 0 评论 -
选择排序
选择排序首先找到数组中最小的那个元素,其次将它和数组的第一个元素交换位置。再次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此往复,直到将整个数组排序。 因为它在不断地选择剩余元素中的最小值,故称为选择排序public void quickSort(int[] a){ for (int i = 0; i < a.length; i++) {...原创 2018-07-11 22:11:47 · 231 阅读 · 0 评论 -
插入排序
插入排序将元素插入到其他已经有序的元素序列中的适当位置。 当前索引左边的所有元素都是有序的,为了给更小的元素腾出空间,它们可能会被移动。当索引到达数组的右端时,数组排序就完成了。 //插入排序,将a[]按升序排列public void insertSort(int[] a){ for (int i = 1; i < a.length; i++) {//将a[i]...原创 2018-07-12 10:50:18 · 236 阅读 · 0 评论 -
快速排序
快速排序快速排序一 切分二 完整实现三 性能分析四 算法特点上篇文章介绍了时间复杂度为O(nlgn)的归并排序,本篇文章介绍时间复杂度同样为O(nlgn)但是排序速度比合并排序更快的快速排序(Quick Sort)。快速排序也是一种采用分治法解决问题的一个典型应用。它将一个数组分成两个子数组,将两部分独立地排序。 归并排序将数组分成两个子数组分别排序,并...原创 2018-07-23 21:14:42 · 260 阅读 · 0 评论 -
希尔排序
希尔排序基于插入排序的快速排序算法,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序希尔排序采用跳跃式分组的策略,通过某个增量将数组元素划分为若干组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。 //希尔排序, 针对有序序列在插入时采用交换法, 将a[]按升序排列public voi...原创 2018-07-12 14:31:33 · 3151 阅读 · 0 评论 -
堆排序
堆排序堆排序一 创建最大二叉堆二 下沉排序三 性能分析四 算法特点用堆来实现一种经典而优雅的排序算法——堆排序堆排序可以分为两个阶段: 1、堆的构造阶段:将原始数组重新组织安排进一个最大堆中,使其堆有序 2、下沉排序阶段:从堆中按递减顺序取出所有元素并得到排序结果如下图,以对S O R T E X A M P L E 排序为例: 首先本地构造一个...原创 2018-07-25 17:44:00 · 360 阅读 · 0 评论 -
排序算法总结
排序算法总结排序算法总结选择排序插入排序归并排序快速排序堆排序选择排序对于长度为N的数组,选择排序需要大约 N2/2N2/2N^2/2 次比较和 NNN 次交换 ( 运行时间和输入顺序无关)插入排序对于长度为N的数组 (非改进插入排序算法), 平均情况下,插入排序需要大约 N2/4N2/4N^2/4 次比较和 N2/4N2/4N^2...原创 2018-07-25 20:25:03 · 158 阅读 · 0 评论