排序
lemon_EM
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
归并排序
2019-06-16 思想: 先实现一个数组的中间位置“断裂”为两个子数组,利用索引实现,一直到每一个都被分开; 直到最后两个数据都被分开后,然后借助辅助数组实现排序与合并操作; 最后递归返回到最初的时候,便实现了整个递归排序 归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的,然后再把有序子序列合并为整体有序序列[2]。 代码实现如下: public class MergeSort { public vo原创 2020-08-21 06:41:48 · 544 阅读 · 0 评论 -
希尔排序——简单选择排序
2019-06-29 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。 1.首先确定分的组数:length2\frac{length}{2}2length; 2.然后对组中的元素进行插入排序; 3.然后继续将 length2\frac{length}{2}2length,重复第一二步,直到 length = 0为止。 /* * @Date 2019/8/7 0:3原创 2020-08-21 06:40:47 · 429 阅读 · 0 评论 -
简单选择排序
2019-06-30 基本思想:每一趟从待排序的数据元素中选择最小(或最大)的一个元素作为首元素,直到所有元素排完为止,简单选择排序是不稳定排序。 1.遍历整个序列,将最小的数放在最前面。 2.遍历剩下的序列,将最小的数放在剩下序列的最前面。 3.重复第二步,直到只剩下一个数。 思路: 1.首先确定循环次数,并且记住当前数字和当前位置。 2.将当前位置后面所有的数与当前数字进行对比,小数赋值给key,并记住小数的位置。 2.比对完成后,将最小的值与第一个数的值交换。 重复2、3步。 publ原创 2020-08-20 06:20:29 · 341 阅读 · 0 评论 -
堆排序
2019-07-01 图解排序算法(三)之堆排序 堆排序是对简单选择排序的优化 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlog2n)O(n\log_2n)O(nlog2n),它也是不稳定排序。 堆的定义 同时,我们对堆中的结点按层进行编号,将这种逻辑结构映射到数组中就是下面这个样子 堆是一个完全二叉树 大顶堆:arr[i] >= arr[2i+1] && arr[i] >= arr[2i+原创 2020-08-20 06:19:23 · 110 阅读 · 0 评论 -
快速排序——交换排序
2019-06-14 快速排序(不稳定) 具体做法 附设两个指针low和high,初值分别指向第一个记录和最后一个记录,设枢轴为key; 1. 从high 所指位置起向前搜索,找到第一个不大于基准值的记录与枢轴记录相互交换; 2. 从low 所指位置起向后搜索,找到第一个不小于基准值的记录与枢轴记录相互交换。 3. 重复这两步直至low=high为止。 可以证明,函数(Quicksort)的平均计算时间是O(nlog2n)O(n\log_2n)O(nlog2n)。实验结果表明:就平均计算时间而言原创 2020-08-20 06:16:25 · 1046 阅读 · 0 评论 -
冒泡排序——交换排序
2019-07-02 1.将序列中所有元素两两比较,将最大的放在最后面。 2.将剩余序列中所有元素两两比较,将最大的放在最后面。 3.重复第二步,直到只剩下一个数。 代码实现 public class bubbleSort { public void bubbleSort(int[] a) { int length = a.length; int temp; //控制比较的趟数,每趟把最大的元素浮动到末尾,共需length-1趟原创 2020-08-20 06:14:30 · 228 阅读 · 0 评论 -
桶排序
2019-07-13 分类 排序算法 数据结构 数组 最坏时间复杂度 O(n2)O(n^2)O(n2) 平均时间复杂度 O(n+k)O(n+k)O(n+k) 最坏空间复杂度 O(n∗k)O(n*k)O(n∗k) 桶排序(Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶里。每个桶再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果。当要被排序的数组内的数值是均匀分配的时候,桶排序使原创 2020-08-20 06:13:29 · 140 阅读 · 0 评论 -
基数排序
2019-07-13 将所有的数的个位数取出,按照个位数进行排序,构成一个序列。 将新构成的所有的数的十位数取出,按照十位数进行排序,构成一个序列。 代码实现 public class RadixSort { public void radixSort(int[] array) { //首先找出最大的数; int max = array[0]; for (int i = 1; i < array.length; i++)原创 2020-08-20 06:12:18 · 128 阅读 · 0 评论 -
2-路插入排序——基于折半插入排序
2019-08-08 代码 /** * @Date: 2019/8/8 08:22 * @Description: 2-路插入排序 * 需要注意first指针和end指针移动时的数组越界问题 */ public class Path2InsertionSort { public void path2InsertionSort(int[] arr) { int length = arr.length; int[] d = new int[length原创 2020-08-20 06:11:05 · 254 阅读 · 0 评论 -
折半插入排序——基于直接插入排序
2019-08-07 代码实现 /** * @Date: 2019/8/7 09:08 * @Description: 折半插入排序,对直接插入排序中 * i前面的基本有序序列使用折半查找来寻找合适的插入位置 */ public class BinsertSort { public void binsertSort(int[] a) { int length = a.length;//数组长度,将这个提取出来是为了提高速度 int insertNu原创 2020-08-20 06:10:02 · 277 阅读 · 0 评论 -
直接插入排序
2019-06-27 把新的数据插入到已经排好的数据列中 对于一个无序数组而言,从第二个数开始选定并向后遍历,比较第二个数与它前面的数,若小于它前面的数则把他前面的数向后移动,最后把该数放入合适的位置。 代码实现 /* * @Date 2019/8/7 8:33 * @Description * 1.将第一个数和第二个数排序,然后构成一个有序序列 * 2.将第三个数插入进去,构成一个新的有序序列。 * 3.对第四个数、第五个数……直到最后一个数,重复第二步。 **/ public cl原创 2020-08-20 06:08:55 · 118 阅读 · 0 评论 -
排序算法稳定性分析及其意义
2019-08-05 排序算法 各种排序方法的性能比较 排序算法稳定性分析 稳定性的定义 在一张大表内包含了整个年级所有的班的同学的考试成绩,当然为了区别每个同学是来自哪个班的,相应的也有班级这个字段来标识。现在,我们依据总成绩这个字段来将全年级的同学进行一个排名,排序的结果当然是各个班级的学生穿插在一起,大致如下表所示: 姓名 班级 成绩 张三 2 95 李四 1 93 王五 2 90 赵六 3 80 丁七 3 70 …… …… …… 在得到这样原创 2020-08-20 06:06:54 · 416 阅读 · 0 评论
分享