??
排序算法
排序是将无需的记录序列调整为有序记录序列的一种操作。
包括:冒泡排序,选择排序,堆排序,插入排序,希儿排序,快速排序,归并排序等。
(一)
冒泡排序
基本思想:
每次进行相邻两个元素的比较,如果为逆序时即进行交换,直到没有反序的数据元素为止。
排序过程:
设想被排序的...
分类:
编程语言 时间:
2015-04-03 17:32:47
阅读次数:
231
题目链接:http://hihocoder.com/contest/hiho39/problem/1 ,归并排序求逆序数。 其实这道题也是可以用树状数组来做的,不过数据都比较大,所以要离散化预处理一下,文中也会给出离散化+树状数组的解法,不过要比归并排序慢一点。算法: 还是按照题中给的解...
分类:
编程语言 时间:
2015-04-03 13:16:38
阅读次数:
161
题目地址:https://leetcode.com/problems/median-of-two-sorted-arrays/
这道题就是求两个有序序列的中位数。这也是2015年4月阿里实习生招人附加题第一题
我用的是归并算法,时间复杂度和空间复杂度都为O(M+N)
class Solution {
public:
double findMedianSortedArrays(int ...
分类:
其他好文 时间:
2015-04-03 11:18:54
阅读次数:
134
#23 Merge k Sorted Lists (N路归并排序)题目地址:#23
题目分类:链表/归并排序/堆排序
题目难度:hard题目
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
翻译:合并K个已经排序的链表,返回一个排序好的链表。...
分类:
编程语言 时间:
2015-04-03 09:38:28
阅读次数:
187
思路:
分治法 归并排序的过程中,有一步是从左右两个数组中,每次都取出小的那个元素放到tmp[]数组中
右边的数组其实就是原数组中位于右侧的元素。当不取左侧的元素而取右侧的元素时,说明左侧剩下的元素均比右侧的第一个元素大,即均能构成一个逆序对。假设现在左侧剩余n个元素,则逆序对数+n。
另外,如果当所有右侧的元素都取完,但是左侧仍然有元素剩余时,左侧剩余的元素已经在之前的运算中加到了逆序对中...
分类:
其他好文 时间:
2015-04-02 22:37:16
阅读次数:
223
http://hihocoder.com/contest/hiho39/problemsjava.util.*;
Main{
=;
mergSort(List<Long>a,l,r){
mid;
(l<r){
mid=(l+r)/;
(a,l,mid);
(a,mid+,r);
List<Long>b1,b2;
b1=ArrayList<Long>(a.subList(l,mid+));
b2=ArrayList<Long>(a.subList(mid..
分类:
编程语言 时间:
2015-04-02 16:39:09
阅读次数:
160
这次一口气放9道题~LeetCode23题,Hard!归并K个有序链表。使用堆来做,一开始把K个链表的第一个元素放进数组,然后建堆。之后取出第一个元素(如果这个元素是nil元素,直接退出)放进归并后的链表,再从这个元素所在的链表取第一个元素放到原来元素的位子上,然后重新维护堆性..
分类:
其他好文 时间:
2015-04-02 11:49:58
阅读次数:
192
1 时间复杂度比较1) 从平均时间复杂度来考虑:直接插入排序、冒泡、直接选择是三种简单的排序方法,为O(N2),快速、堆、二路归并排序为O(nlog2n),希尔排序介于两者之间。2) 从最好的时间复杂度考虑:直接插入排序和冒泡为O(n),其他的最好情况平均相同。3) 从最坏的时间复杂度考虑:快速排序...
分类:
编程语言 时间:
2015-04-02 10:18:47
阅读次数:
113
最近申请了微软的暑假实习,4号就要在线笔试了,在线测试系统用的是http://hihocoder.com/,今天试手做了一道题。
【题目】
原题链接:http://hihocoder.com/contest/hiho39/problem/1
输入
第1行:1个整数N,表示数组长度。
第2行:N个整数,表示数组的元素a[i],1≤a[i]≤2^31-1。
输出
第1行...
分类:
编程语言 时间:
2015-04-02 01:21:08
阅读次数:
169