排序
文章平均质量分 50
Luckyness
这个作者很懒,什么都没留下…
展开
-
堆排序
堆排序原理:从最后一个树叉结点开始往前,将每个树叉结点所在树修复成大根堆,然后将堆的根结点(最大值)与末尾结点交换,去掉末尾结点,再将余下节点修复成大根堆,再将根结点与末尾结点交换...最后得到由小到大的已排数组。完全二叉树父子结点索引公式:父结点=i,左孩子=i*2-1,右孩子=i*2大根堆:父结点大于子节点的完全二叉树 时间复杂度:O(nlogn),稳定 public stati...原创 2014-03-30 21:15:37 · 96 阅读 · 0 评论 -
希尔排序
希尔排序原理:对指定步长的数据进行插入排序,然后减小步长进行插入排序,直到步长为1时进行插入排序,最终完成所有数据的排序。 步长:具体的步长视数组长度而定,本例简单以len >>> k为步长,其中len为数组长度,k为1, 2, 3 ... 时间复杂度:最好O(nlog2n),最坏O(n^2) 最好最坏取绝于步长。 /** * @descr...原创 2014-03-31 21:34:42 · 103 阅读 · 0 评论 -
冒泡排序
冒泡排序原理:从后往前,把小的数与前一个数交换,直到把最小的数交换到首位;首位后移,重复上述操作,得到有序数组。 时间复杂度:最优O(n),最坏O(n^2),平均O(n^2) 数据已经正序排好的情况最优,倒序最坏 public static <T extends Comparable<T>> int compare(T a, T b) { ...原创 2014-03-31 21:58:36 · 89 阅读 · 0 评论 -
插入排序
插入排序原理:从左往右依次将数据插入到前面已排序好的数组中。 时间复杂度:最优O(n),最坏O(n^2),平均O(n^2) 数据已经正序排好的情况最优,倒序最坏 public static <T extends Comparable<T>> int compare(T a, T b) { if (a == null){ ...原创 2014-03-31 22:31:38 · 104 阅读 · 0 评论 -
选择排序
选择排序原理:从数组中查找最大值,然后与队首交换,然在剩下的数据中查找最大值,与余下队首交换…最后完成排序。 时间复杂度:O(n^2),稳定 public static <T extends Comparable<T>> int compare(T a, T b) { if (a == null){ return b == nu...原创 2014-03-31 22:47:12 · 89 阅读 · 0 评论 -
归并排序
归并排序原理:将数组二分,然后对二分后的数组继续使用归并排序...当分解后数组元数足够小时(为1),说明每个数组已经排序好,然后将二分的数组通过某个算法合并成已经排好序的数组,直至整个数组都排序好序。 时间复杂度:最优O(n),最坏O(nlogn),平均O(nlogn) 归并排序jdk源码优化方案: 1. 当分解后的数组元素个数小于7时,改用插入排序 2. 当二分后的已经排...原创 2014-04-01 00:13:01 · 119 阅读 · 0 评论 -
快速排序
快速排序原理:快排采集分治法的思想,根据排序基准值把待数据分成两份,左边的数据比基准值小,右边的数据比基准值大,然后左右两边数据再按照各自己基准值划分...直至分解已排序的小数组,最终得到已排序数组。 关于基准值位置查找 微缩:最左边的设为基准值,从后往前找小的,找到移到前面,再从前往后找大的,再找到移到后面...直到找不到为止。 啰嗦:把最前面的数值当做基准值,然后从数组的右边位...原创 2014-04-02 22:31:30 · 123 阅读 · 0 评论