原文引用https://www.dazhuanlan.com/2019/08/26/5d62f77c1b321/ Description题目大意,给你一串每个元素不相同的序列,每次只能相邻的两个元素进行交换,求,最小多少次交换可以使该序列成为上升序列。注意:明白一个规律,一个数x,肯定要和在它左边且... ...
分类:
编程语言 时间:
2019-08-26 10:15:05
阅读次数:
111
稳定性 如果一个排序算法能够保留数组中 重复元素的相对位置 则可以被称为是 稳定 的 稳定的排序算法:插入排序、归并排序 不稳定的排序算法:选择排序、希尔排序、快速排序和堆排序 一般只有在稳定性是必要的情况下,稳定的排序算法才有优势。 各种排序算法的性能特点 | 算法 | 是否稳定 | 是否为原地排 ...
分类:
编程语言 时间:
2019-08-25 20:18:42
阅读次数:
109
归并排序 package algorithm.sort; / @Auther: AaronPi @Date: 2019 5 6 21:32 归并排序 思想:(分治法 用递归来实现)把数组从中间分成两部分,分别排序,再组合在一起 思路很巧妙,需要尤其注意边界条件、判断剩余元素等事项 / public ...
分类:
编程语言 时间:
2019-08-25 14:13:25
阅读次数:
94
快速排序 package algorithm.sort; / 快速排序 思想:类似于归并排序,但是不同于归并排序每次排序寻找一次子数组中点的是,寻找一个更恰当的分区点 @Author 28370 @Date 2019 5 13 / public class QuickSort { public st ...
分类:
编程语言 时间:
2019-08-25 14:06:52
阅读次数:
80
hdu 5884 Sort 题意: n个有序序列的归并排序。每次可以选择不超过k个序列进行合并,合并代价为这些序列的长度和,总的合并代价不能超过T, 问k最小是多少。 解法: 1:首先想到的是二分这个答案k,然后check每个k是否可行 2:对于每个k,总共需要归并n 1个数,每次归并k 1个数 所 ...
分类:
其他好文 时间:
2019-08-22 22:22:33
阅读次数:
117
思路:使用归并排序,每一轮归并后都局部有序,可以利用这个,减少时间复杂度 小和问题 关键代码: java public static int mergeSort(int[] arr, int left, int right) { if (left == right) { return 0; } in ...
分类:
其他好文 时间:
2019-08-22 22:01:00
阅读次数:
94
首先考虑归并排序: 归并排序为什么能相比普通的排序方法,将时间复杂度从O(n^2)提升至O(nlogn)? 最主要的一点是引入了两个有序数组合并的思想,真正提升效率就是在这个地方。 首先我们考虑,如果两个数组无序的话,比如: 如果使用O(n^2)的方法,在这样一个数组中,每一个数都要跟其他的数比较一 ...
分类:
编程语言 时间:
2019-08-22 11:05:07
阅读次数:
98
排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括: 关于时间复杂度: 平方阶 ...
分类:
编程语言 时间:
2019-08-21 11:20:44
阅读次数:
80
```java class Solution { public ListNode sortList(ListNode head) { if (head == null || head.next == null) { return head; } ListNode slow = head, fast ...
分类:
编程语言 时间:
2019-08-18 21:48:31
阅读次数:
90