各种排序方法的性能比较
排序方法
最好时间复杂度
平均时间复杂度
最坏时间复杂度
空间复杂度
稳定性
直接插入排序
O(n)
O(n2)
O(n2)
O(1)
稳定
简单选择排序
O(n2)
O(n2)
O(n2)
O(1)
不稳定
冒泡排序
O(n)
O(n2)
O(n2)
O(1)
稳定
希尔排序
-
...
分类:
编程语言 时间:
2014-11-29 20:15:57
阅读次数:
218
给定一个字符串,要求把字符串前面的若干个字符移动到字符串的尾部,如把字符串“abcdef”前面的2个字符'a'和'b'移动到字符串的尾部,使得原字符串变成字符串“cdefab”。请写一个函数完成此功能,要求对长度为n的字符串操作的时间复杂度为 O(n),空间复杂度为 O(1)。...
分类:
其他好文 时间:
2014-11-27 14:40:58
阅读次数:
256
Given a linked list, determine if it has a cycle in it.
Follow up:
Can you solve it without using extra space?
这个题目如果没有空间复杂度O(1)的限制,我可以想到的方法就是:遍历整个list,将每个节点的地址存入一个vector,如果发现某个节点的next的地址已经在vec...
分类:
其他好文 时间:
2014-11-26 19:02:15
阅读次数:
119
本题要求把1,2,3尽可能的平均分配到3个容器中,保证每一个都包含1、2、3,求这样的最大组合数以及输出一种可能的组合。可以暴力枚举!时间复杂度O(n),空间复杂度也为O(n)。...
分类:
其他好文 时间:
2014-11-26 01:29:20
阅读次数:
234
//冒泡算法 时间复杂度:O(n2) 空间复杂度:O(1) for(int i=0;iarr[j+1]){ int temp = arr[j]; arr[j] = arr[j+1]; ...
分类:
编程语言 时间:
2014-11-25 22:59:11
阅读次数:
203
给定一个矩阵,如果有零元素那么就将零元素所在的行和列都置为零。
Given a m x n matrix,
if an element is 0, set its entire row and column to 0. Do it in place.
最直观的解法就是开辟一个新的矩阵,当原矩阵存在零元素的时候,就将新矩阵的对应行和列置为零。这样空间复杂度较高,也是题目不允许的。
题目的难...
分类:
编程语言 时间:
2014-11-24 20:53:43
阅读次数:
314
问题描述:一个矩阵,里面的元素只为1或者0,要求把元素为1的元素的同行和同列的所有元素都置为1,要求:算法空间复杂度为O(1). 1 void _setRowAndCol(int arrays[], int row, int col) 2 { 3 assert(arrays != NULL ...
分类:
其他好文 时间:
2014-11-23 18:48:23
阅读次数:
243
异或链表(Xor Linked List)也是一种链式存储结构,它可以降低空间复杂度达到和双向链表一样目的,任何一个节点可以方便的访问它的前驱节点和后继结点。可以参阅wiki 普通的双向链表 class Node {
public: int data; Node *prev; Node *next;...
分类:
其他好文 时间:
2014-11-19 20:24:07
阅读次数:
511
算法分析:
本题是拓扑排序的典型应用。
由于顶点数量不多,可以采用邻接矩阵来存储图信息,这样算法比较简单,只需要搜索n次,每次把序号最小的入度为0的顶点存储到拓扑序列中就行了。算法思路比较清晰,代码也比较简洁,但时间复杂度和空间复杂度都较高。
另一种方法是采用邻接表存储图信息。由于题目要求输出时编号小的队伍在前,所以在入栈时一定要保证先让序号最小的入度为0的顶点在栈顶,这样根据后进先出的特点,可以把序号最小的顶点存储到拓扑序列中。我采用折半插入排序的方法,把入度为0的顶点按递减序排序,然后对图进行深度优先...
分类:
其他好文 时间:
2014-11-19 16:05:59
阅读次数:
174
题目要求: 一个整型数组里除了两个数字机之外,其他的数字都出现了两次。 请写程序找出这两个只出现一次的数字。要求时间复杂度O(N).空间复杂度O(1). 参考资料:剑指offer第40题。题目分析: 已知: 1.两个相同的数字异或的结果为0,即a^a = 0. 2.两个不相同的数...
分类:
编程语言 时间:
2014-11-17 11:55:16
阅读次数:
207