![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
七大排序
Anonyme(ღ˘⌣˘ღ)
这个作者很懒,什么都没留下…
展开
-
归并排序
归并排序** 时间复杂度:** O(N * log2 N)算法思想: 首先把一个数组中的元素,按照某一方法,先拆分了之后,按照一定的顺序各自排列,然后再归并到一起,使得归并后依然是有一定顺序的 。代码示例:(1)递归实现归并排序/1.递归拆分,先拆分为单个的序列 public static void mergeSort(int[] array,int low,int high){...原创 2020-01-27 23:48:52 · 83 阅读 · 0 评论 -
快速排序
快速排序时间复杂度: O(N * log2 N)最坏情况下: O (N ^ 2)空间复杂度: O(log2 N)代码示例:(1)递归实现快速排序public static void quickSort(int[] array){ quick(array,0,array.length - 1);}public static void quick(int[] array,int...原创 2020-01-27 15:50:50 · 120 阅读 · 0 评论 -
冒泡排序
冒泡排序时间复杂度: O(n^2)空间复杂度: O(1)稳定性: 稳定趟数和次数的关系: * 例如:有n个数据,需要比较n-1趟, * 第一趟:比较n-1次 * 第二趟:比较n-2趟 * 比较的次数随着趟数的减少而减少优化: 设置标志判断每一趟是否发生了交换,若发生了交换,则进行下一趟;若没发生交换,说明已经有序,则不需要再进行比较代码示例: pub...原创 2020-01-24 12:18:56 · 195 阅读 · 0 评论 -
堆排序
堆排序时间复杂度: n*log2(n)稳定性: 不稳定实现: 将给定的数组当成一棵二叉树,从最后一个子树的开始向下调整,结束后是一个大根堆;将根节点元素与最后一个元素交换,将大的存到数组最后,交换完再向下调整,循环直到交换结束基本原理: 也是选择排序,只是不在使用遍历的方式查找无序区间的最大的数,而是通过堆来选择无序区间的最大的数。注意: 排升序要建大堆;排降序要建小堆。堆排序过...原创 2020-01-24 12:13:31 · 135 阅读 · 0 评论 -
选择排序
选择排序时间复杂度: O(N^2)空间复杂度: O(1)稳定性: 不稳定**思想:**从头开始拿出元素与之后的比较,满足条件则交换代码示例:public static void selectSort(int[] array){ for(int i = 0;i < array.length;i++){ for(int j = i + 1;j < ar...原创 2020-01-24 12:04:00 · 84 阅读 · 0 评论 -
希尔排序
希尔排序**时间复杂度:**最好 O(N)最坏 O(n ^ 2)稳定性: 比较时加了" = ",则不稳定,否则稳定实现: 组内直接插入排序,最后看成一组,进行插入排序。思想与直接插入排序类似,不过增量变成了组的差值(这是因为在进行组内排序)分组-》组内插入排序-》最后看成一组代码示例:public static void shell(int[] array,int gap){ ...原创 2020-01-24 11:53:32 · 192 阅读 · 0 评论 -
直接插入排序
直接插入排序时间复杂度: O(N ^ 2) (最坏情况下 - 无序)O(N) (最好情况下 - 有序)稳定性:稳定实现原理:简单的说,就是把数组划分为两个部分,一部分已经有序(在最开始的时候,就把第一个元素,看成有序的那部分),一部分未排序;每次从未排序的部分,取第一个元素,然后遍历有序部分,进行比较,找到位置以后,就将这个元素插进去。具体做法就是,找到位置以后,不断把已经有序的元素...原创 2020-01-24 11:40:19 · 115 阅读 · 0 评论