算法
文章平均质量分 72
hhys08120
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
桶排序
桶排序假设输入数据服从均匀分布,平均情况下它的时间代价为O(n)。与计数排序类似,因为对输入数据做了某种假设桶排序的速度也很快。具体来说,计数排序假设输入数据都属于一个小区间内的整数,而桶排序则假设输入是由一个随机过程产生,该过程将元素均匀、独立地分布在[0,1)区间上。#includeusing namespace std;template void insertSort(T *a,原创 2013-06-09 21:04:54 · 504 阅读 · 0 评论 -
短文 词频
本程序从正文文件text.txt读入一篇英文短文,统计该短文中不同单词和它的出现次数,并按词典编辑顺序将单词及它的出现次数输出到正文文件word.txt中.程序用一棵有序二叉树存储这些单词及其出现的次数,一边读入一边建立.然后中序遍历该二叉树,将遍历经过的二叉树上的节点的内容输出.#include#include#includeusing namespace std;ifs原创 2013-08-21 15:13:05 · 495 阅读 · 0 评论 -
二叉树树的基本算法
#includeusing namespace std;#define OK 1#define ERROR 0#define OVERFLOW -2typedef char ElemType;const int MaxLength = 30;//结点个数不超过30个typedef struct BiTreeNode{ ElemType data; struct BiTree原创 2013-06-24 14:20:41 · 527 阅读 · 0 评论 -
二叉查找树(二叉排序树)的详细实现
1、序 详细实现了二叉查找树的各种操作:插入结点、构造二叉树、删除结点、查找、 查找最大值、查找最小值、查找指定结点的前驱和后继2、二叉查找树简介 它或者是一棵空树;或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树转载 2013-07-06 22:40:30 · 562 阅读 · 0 评论 -
计数排序
//计数排序假设n个输入元素中的每一个都是在0到k区间内的一个整数,其中k为某个整数。#includeusing namespace std;int* countingSort(int *A,int *B,int ASize){ int maxKey = -65535; for(int i=0;i<ASize;++i) { B[i] = 0; if(A[i]>maxKey)原创 2013-06-08 09:56:55 · 401 阅读 · 0 评论 -
排序算法稳定性
假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。判断方法:对于不稳定的排序算法,只要举出一个实例,即可说明它的不稳定性;而对于稳定的排序算法,必须对算法进行分析从而得到稳定的特性。需要注意的是,排序算法是否为稳定转载 2013-06-08 11:09:39 · 761 阅读 · 0 评论 -
优先队列
堆的一个常见的应用:作为高效的优先队列。优先队列是用来维护有一组元素构成的集合S的数据结构,其中的每一个元素都有一个相关的值,称为关键字。一个最大优先队列支持一下操作:INSERT(S,x): 将元素x插入集合中。MAXIMUM(S):返回S中具有最大键字的元素。EXTRACT-MAX(S):去掉并返回S中的具有最大键字的元素。INCREASE-KEY(S,x,k):将元素x的原创 2013-06-07 10:09:22 · 485 阅读 · 0 评论 -
快速排序
快速排序的运行时间依赖于划分是否平衡,而平衡与否又依赖于用于划分的元素。如果划分是平衡的,那么快速排序算法性能与归并排序一样。如果划分是不平衡的,那么快速排序的性能就接近于插入排序了。#includeusing namespace std;//快速排序template int partition(T *a,int first,int end) //实现了对子数组A[p..r]的原创 2013-06-07 15:11:24 · 465 阅读 · 0 评论 -
堆排序
#includeusing namespace std;void maxHeap(int *a,int i,int heapSize){ int l = 2*i; int r = 2*i+1; int largest=0; if(la[i-1]) //左孩子大于父节点 largest = l; else largest = i; if(ra[large原创 2013-06-06 16:08:04 · 422 阅读 · 0 评论 -
最大子数组问题
//分治策略#includeusing namespace std;struct subarray //返回一个下标元组划定跨越中点的最大子数组的边界,并返回最大子数组中值的和{ int left; int right; int sum;}sub,subL,subR,subC;subarray FIND_MAX_CROSSING_SUBARRAY(int *a,int l原创 2013-06-05 15:03:39 · 558 阅读 · 0 评论 -
selectionSort
#includeusing namespace std;templatevoid selectionSort(T *a,int num){ int min=0; //最小值下标 for(int i=0;i<num-1;++i) { min = i; for(int j=i+1;j<num;++j) if(a[j]<a[i]) min = j; swap(a[原创 2013-06-04 11:03:36 · 539 阅读 · 0 评论 -
mergeSort
#includeusing namespace std;template void merge(T *a,int left,int mid,int right){ int n1=mid-left+1; int n2=right-mid; T *L = new T[n1]; T *R = new T[n2]; for(int i=0;i<n1;++i) L[i] = a[left原创 2013-06-04 10:17:42 · 550 阅读 · 0 评论 -
insertSort
#includeusing namespace std;template void insertSort(T *a,int num){ int i,j; T key; for(j=1;j<num;++j) { key=a[j]; i=j-1; while(i>=0&&a[i]>key) { a[i+1]=a[i]; --i; } a[i+1]=ke原创 2013-06-03 15:42:39 · 505 阅读 · 0 评论 -
bubbleSort
#includeusing namespace std;templatevoid bubbleSort(T *a,int num){ for(int i=0;i<num-1;++i) for(int j=num-1;j>=i+1;--j) if(a[j-1]>a[j]) swap(a[j-1],a[j]);}templatevoid print(T *a,int n原创 2013-06-04 11:17:02 · 482 阅读 · 0 评论 -
期望为线性时间的选择算法randomizedSelect
一般选择算法看起来要比找最小值这样的简单问题更难,但有期望为线性时间的选择算法,期望运行时间为O(n)。#include#includeusing namespace std;template int partition(T *a,int first,int end) //实现了对子数组A[p..r]的原址重排{ int x = a[end-1]; int i = first原创 2013-06-09 21:14:07 · 969 阅读 · 0 评论 -
寻找第K大的数
可以用容量为K的最小堆来存储最大的K个数。最小堆的堆顶就是最大K个数中最小的一个,即第K大的数。每次新考虑一个数X,如果X比堆顶的元素Y小,则不需要改变原来的堆,如果比堆顶元素大,那么用X替换堆顶的元素Y。在X替换堆顶元素Y之后,X可能破坏最小堆的结构,需要更新堆来维持堆的性质。更新过程花费的时间复杂度为O(log2K).#includeusing namespace std;void原创 2013-08-17 12:06:09 · 514 阅读 · 0 评论
分享