基础知识: 排序:通过计算机手段将一组随机无序的数列变成有序的数列。常用排序算法有很多,主要有如下的几种: 包括插入排序,冒泡排序,选择排序,堆排序,归并排序,计数排序,基数排序,桶排序,快速排序等。 插入排序,堆排序,选择排序,归并排序和快速排序,冒泡排序都是比较排序,它们通过对数组中的元素...
分类:
其他好文 时间:
2014-08-11 14:45:42
阅读次数:
282
堆排序与高速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先解说下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是全然二叉树或者是近似全然二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)不论什么一个子节点的键值。2.每一个结点的左子树和右...
分类:
其他好文 时间:
2014-08-10 23:54:20
阅读次数:
289
原文:http://blog.csdn.net/t12x3456/article/details/7430700各种排序算法:冒择路(入)兮(稀)快归堆,桶式排序,基数排序冒泡排序,选择排序,插入排序,稀尔排序,快速排序,归并排序,堆排序,桶式排序,基数排序一、冒泡排序(BubbleSort)1. ...
分类:
编程语言 时间:
2014-08-10 21:10:51
阅读次数:
429
快速排序在最坏情况下的时间复杂度为O(n^2),虽然在最坏情况下运行时间比较差,但是快速排序通常是用于排序的最佳选择,因为其平均性能相当好,期望的运行时间为O(nlgn),且在O(nlgn)的记号中隐含的常数因子很小。
快速排序和合并排序有相似之处,都是需要划分序列,在合并排序中,划分的过程很简单,直接选择元素序列的中间位划分位置,排序是在合并的过程中实现的,所以合并排序的合并过程很重要;相比合...
分类:
其他好文 时间:
2014-08-10 15:49:50
阅读次数:
213
题目地址:POJ 2299
这题曾经用归并排序做过,线段树加上离散化也可以做。一般线段树的话会超时。
这题的数字最大到10^10次方,显然太大,但是可以利用下标,下标总共只有50w。可以从数字大的开始向树上加点,然后统计下标比它小即在它左边的数的个数。因为每加一个数的时候,比该数大的数已经加完了,这时候坐标在它左边的就是一对逆序数。
但是该题还有一个问题,就是数字重复的问题。这时候可以在排序...
分类:
其他好文 时间:
2014-08-10 15:43:20
阅读次数:
210
快速排序法作为一种分治法的算法,和归并排序法的差别在于,前者是先比较,后拆分,而后者是先拆分,在合并的过程中进行比较。快速排序法在原理上简单总结就是:切分:拿数组第一个数(也可以是随机任意一个)作为中心点(pivot);扫描其它所有数,将小于这个中心点的数归类到左边,大于中心点的归类到右边;将左边(...
分类:
其他好文 时间:
2014-08-10 15:22:30
阅读次数:
208
首先,归并排序,分治,递归解决小的范围,再合并两个有序的小范围数组,便得到整个有序的数组。
这是很适合用递归来写的,至于非递归,便是从小到大,各个击破,从而使得整个数组有序。代码如下:
void merge(vector &A, int left, int mid, int right)
{
int i=left,j=mid+1;
vector tmp(right-left+1,0);...
分类:
其他好文 时间:
2014-08-10 13:08:00
阅读次数:
235
说明:归并排序: 时间 O(nlogn),空间 O(1). 每次将链表一分为二, 然后再合并。快排(用两个指针)
说明: 与顺序表不同的时,每次找插入位置时从头开始走。
分类:
其他好文 时间:
2014-08-10 01:40:39
阅读次数:
226
Sort a linked list in O(n log n) time using constant space complexity.思路:题目要求O(n log n)的时间复杂度以及常空间复杂度,因此,使用归并排序策略。 1 class Solution { 2 public: 3 ...
分类:
其他好文 时间:
2014-08-09 23:13:19
阅读次数:
284
python 分词计算文档TF-IDF值并排序...
分类:
编程语言 时间:
2014-08-09 11:38:07
阅读次数:
617