快速排序算法。python实现。 1 # -*- coding: utf8 -*- 2 3
import random 4 5 def partition(mylist, low, high): 6 pivotkey = mylist[low] 7
while low = piv...
分类:
其他好文 时间:
2014-05-17 01:25:40
阅读次数:
305
1、快速排序
通过选择轴值,一次划分都能确定该轴值得位置,其时间复杂度最好的情况(每次划分都恰好将区间平分为等长的两半)下为Ο(nlgn),最差情况(每次划分将区间分成0与n-1)为O(n^2)。其空间复杂度考虑递归的栈深为O(lgn)。
1 /********************...
分类:
其他好文 时间:
2014-05-16 19:24:46
阅读次数:
361
题目: Sort a linked list inO(nlogn) time using
constant space complexity.解题思路: 复杂度为O(n* logn)
的排序算法有:快速排序、堆排序、归并排序。对于链表这种数据结构,使用归并排序比较靠谱。递归代码如下:代码: /...
分类:
其他好文 时间:
2014-05-16 05:49:04
阅读次数:
266
原理都很简单,关键是某些边界能否正确写对:
#include
#include
using namespace std;
class Node {
public:
int val;
Node* next;
Node(int val = 0):val(val),next(NULL){
}
};
Node* quicksort(Node* head, Node* tai...
分类:
其他好文 时间:
2014-05-15 20:27:36
阅读次数:
296
堆的概念
堆是具有下列性质的完全二叉树:每个节点的值都大于或等于其左右孩子结点的值,称为大顶堆;或着每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。 堆排序
堆排序(Heap Sort)就是利用堆(假设利用大顶堆)进行排序的方法。它的基本思想是,将待排序的序列构造成一个大顶堆。此时,整个序列...
分类:
其他好文 时间:
2014-05-15 16:18:31
阅读次数:
329
嗯,数据结构中,排序是不可少的,下面给出java版本的排序...
分类:
编程语言 时间:
2014-05-15 14:44:49
阅读次数:
330
简单点说其实Segment Tree就是二分法的灵活运用。
需要的基础知识:
1 二分法
2 二叉树
3 最好熟悉堆排序
操作就是二分法和堆排序巧妙地合并起来。
有了这些基础知识Segment Tree就没有任何难度了。
参考原文:
http://www.geeksforgeeks.org/segment-tree-set-1-sum-of-given-range/
...
分类:
其他好文 时间:
2014-05-15 13:33:33
阅读次数:
250
快速排序最坏情况下时间复杂度是O(n*n),但是它平均时间复杂度是O(N*logn),并且常数因子很小,可实现就地排序,所以被作为内排序的常用排序方法.
#include
using namespace std;
void swap(int &i,int &j)
{
int temp=i;
i=j;
j=temp;
}
int partition(int *vector...
分类:
其他好文 时间:
2014-05-15 06:05:35
阅读次数:
254
基于比较的排序时间复杂度至少为O(nlgn),在时间上堆排序和快速排序基本上都达到了比较排序的极限,如果要获取更快的排序速度,就需要找不是基于比较的排序方法,位图排序就是其中的一个。
位图排序是效率最高的排序算法,其时间复杂度是O(n),空间复杂度也非常小,但是要求输入的数据不能重复,而且要知道数据的范围。
位图排序的思想比较简单,用计算机的每一位表示一个数,一个int类型的变量就能表...
分类:
其他好文 时间:
2014-05-15 04:41:27
阅读次数:
262
建堆的时间复杂度是O(n),堆排序的时间复杂度是O(NLogN),具体算法如下所示:
#include
using namespace std;
void swap(int &i,int &j)
{
int temp=i;
i=j;
j=temp;
}
void shiftDown(int *A, int start,int len)
{
int temp=A[...
分类:
其他好文 时间:
2014-05-13 13:55:15
阅读次数:
270