算法
zhuhuiby
这个作者很懒,什么都没留下…
展开
-
堆排序
#include #include int paraent(int i);int leftchild(int i);int rightchild(int i);void max_heap(int data[],int i,int len);void bul转载 2011-08-26 02:44:02 · 315 阅读 · 0 评论 -
合并排序
合并排序利用的是分治原理 合并排序的主要思想是:把两个已经排序好的序列进行合并,成为一个排序好的序列。例如:13579 2468这两个序列,各自都是排好序的,然后我们进行合并,成为123456789这样一个排好序的序列。 所以第一步是分解子序列,将其分解成转载 2011-08-26 02:42:31 · 355 阅读 · 0 评论 -
最大值-最小值
求最大最小的时候有点小技巧,就是我们两个两个的比较,把大个跟当前最大比较,小的跟当前最小的比较,这样就会节约一点比较时间,有原来的2*n到3*n / 2。#include #include //得到最大最小值 int GetMaxMin(i转载 2011-08-26 02:59:31 · 523 阅读 · 0 评论 -
利用堆之优先队列
利用上一节的最大堆,中间省略了很多该删和修改的东西,总是时学习算法吗~~~~~懒了一些啊,O(∩_∩)O #include #include struct heap{ int *data; int size;};int paraent(int i)转载 2011-08-26 02:44:39 · 332 阅读 · 0 评论 -
冒泡排序
将被排序的记录数组R[1..n]垂直排列,每个记录R[i]看作是重量为R[i].key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上"飘浮"。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。 代码如下:转载 2011-08-26 02:43:02 · 288 阅读 · 0 评论 -
插入排序
重点:从后面插入将待插入记录R[i]的关键字从右向左依次与有序区中记录R[j](j=i-1,i-2,…,1)的关键字进行比较:① 若R[j]的关键字大于R[i]的关键字,则将R[j]后移一个位置;②若R[j]的关键字小于或等于R[i]的关键字,则查找过程结束,j+1即转载 2011-08-26 02:41:23 · 451 阅读 · 0 评论 -
查找第i个元素
利用快速排序随机算法实现查找第i个数据,唯一不同的是不必每次都对其进行排序,只需要对一边进行排序同时:一版和二版的算法导论,快排有一点点不同,就在于是从第一个数,还是从最后一个数快排的算法复杂度为O(nlgn)但是这个随机选择的期望时间为O(n)#include转载 2011-08-26 03:00:14 · 1438 阅读 · 0 评论 -
基数排序
利用的就是计数排序的原理,复杂度也是O(n) 最初的数据排好个位的数据排好十位的数据排好百位的数据981981725129387转载 2011-08-26 02:58:33 · 330 阅读 · 0 评论 -
计数排序
#include #include void countsort(int ndata[],int newdata[],int begin,int end); int main() { int nData[8] = {2转载 2011-08-26 02:57:06 · 330 阅读 · 0 评论 -
快速排序
#include #include void quicksort(int data[],int i,int num); void exchange(int data[],int i,int j); int quickdepart(i转载 2011-08-26 02:51:43 · 323 阅读 · 0 评论 -
随机抽样问题(蓄水池问题)
【问题】随机抽样问题表示如下:要求从N个元素中随机的抽取k个元素,其中N无法确定。这种应用的场景一般是数据流的情况下,由于数据只能被读取一次,而且数据量很大,并不能全部保存,因此数据量N是无法在抽样开始时确定的;但又要保持随机性,于是有了这个问题。所以搜索网站有时候会转载 2011-09-27 17:09:51 · 533 阅读 · 0 评论