![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法和数据结构
iteye_18009
这个作者很懒,什么都没留下…
展开
-
希尔排序
希尔排序是简单插入排序的优化。插入排序在数组基本有序的情形下非常高效,希尔排序则通过创造这种环境,并最终进行一次整体的插入排序实现性能的优化。代码如下:[code="java"] /** * * @param arr 待排序数组 * @param group 分组数 */ public void shellSort(Integer[] arr, int g...2011-09-07 15:44:47 · 94 阅读 · 0 评论 -
直接插入排序
直接插入排序。[code="java"] public void sortWithIndex(Integer arr[], int from, int to) { if (arr == null || to > arr.length - 1||from= arr[j-1]) { break; } arr[j] = arr[j - 1]; }...2011-09-07 22:50:12 · 77 阅读 · 0 评论 -
堆排序
建立堆的时间复杂度为O(n),随后的排序为O(nlgn);常用于取前K大/小的应用。[code="java"] public void heapSort(int[] arr) { if (arr == null || arr.length == 0) { return; } for (int i = arr.length / 2; i >= 0; i--) {...2011-09-07 23:20:22 · 81 阅读 · 0 评论 -
归并排序
归并排序,时间复杂度O(nlgn),相比快速排序和堆排序,优势是排序稳定。通过两两分拆、归并实现。在子数组长度小于等于7(一说50)时可采用插入排序来提高效率(但我在本机上测试,两者带来的提升并不明显)。JDK自带的Collections.sort方法采用的即是归并排序。[code="java"]public class MergeSort { private int[] temp...2011-09-07 23:34:18 · 78 阅读 · 0 评论 -
快速排序
快速排序。基于比较的排序中基本上最快的算法O(nlgn)。数据基本有序且每次取第一个元素作划分点(含基本相同)时将遭遇“最坏”情形,时间复杂度为O(n^2)。换言之数据越乱越高效。缺点:非稳定排序。[code="java"] public void q_sort(int[] arr, int from, int to) { if (arr == null || arr.length ...2011-09-07 23:42:28 · 75 阅读 · 0 评论 -
基数排序
时间复杂度为O(k*n)的排序算法。目前只适用于非负整数,当然改造下也可用于负整数。[code="java"] /** * 过程:1、从个位数起,使用计数排序作为内排序方法,针对各个数位即“基数”进行排序。 * * * @param arr * @param digit 最大数据的位数,比如100则输入3 * */ public int[...2011-09-08 10:17:22 · 91 阅读 · 0 评论