算法导论
Imcy
一只蜗牛
展开
-
算法导论:c++选择算法
选择算法即给定数组A,选出第i个大的元素,区别于排序后选择这种比较慢的方法,选择算法不需要排序即可选出第i个大元素基于随机快排选择算法首先实现随机快排: 随机快排就是在快排的基础上主元用随机数产生。// 随机快速排序之随机选择替代主元int random_partition(int array[], int p, int r){ int i=(rand() % (r - p + 1))原创 2017-12-08 11:29:28 · 902 阅读 · 0 评论 -
算法导论:开放寻址
插入散列表查找散列表探查方法图中,第一次查找h1(k)=1 mod 13=1,h2(k)=1+(14 mod 11)=4,h(k,1)=(h1(k)+1×h2(k))mod 13=5。所以先查找1和5位置,非空后查找h(k,1)=(h1(k)+2×h2(k))mod 13=9处。二级散列原创 2017-12-18 15:17:54 · 892 阅读 · 0 评论 -
算法导论:排序算法笔记
排序算法相关笔记原创 2017-11-29 10:19:33 · 399 阅读 · 0 评论 -
算法导论:c++实现红黑树
数据结构性质 这里定义一个结构体保存颜色enum colorRB{ black = 0, red,};struct TreeNode_RB { int val; colorRB color; TreeNode_RB *left; TreeNode_RB *right; TreeNode_RB *parent; TreeNod原创 2017-12-21 11:17:27 · 370 阅读 · 0 评论 -
算法导论:c++桶排序
代码实现桶排序是按照桶的概念把元素往里面放,然后桶内还有一个排序,桶内排序可以用比较排序也可以用计数排序递归使用桶排序也可以。我这里比较懒,直接用了sort函数。直接就三步,仍然用vector实现。 建桶 放桶 连接桶 vector<double> bucket_sort(vector<double> array) { vector<vector<double>> o原创 2017-12-04 17:17:44 · 768 阅读 · 0 评论 -
算法导论:c++实现二叉搜索树
struct TreeNode_p { int val; TreeNode_p *left; TreeNode_p *right; TreeNode_p *parent; TreeNode_p(int x) : val(x), left(NULL), right(NULL),parent(NULL) {}};二叉搜索树搜索TreeNode_p *tree_s原创 2017-12-18 16:27:54 · 566 阅读 · 0 评论 -
算法导论:c++计数排序
区别于比较排序需要元素进行相互比较,计数排序仅仅通过元素个数确定它在排序结果中的位置。代码实现实在是不想用数组了,这次用方便易操作的vector代替。/*计数排序*/vector<int> counting_sort(vector<int> array,int k) //k表示数组中最大元素,output为输出{ vector<int> temp(k+1,0);//临时数组,存放个数原创 2017-12-02 17:25:26 · 612 阅读 · 0 评论 -
算法导论:c++归并排序
基本思想就是把数组一直分成两半,然后对这两半进行排序归并。 先分成左右两半,然后合并时比较左右两半一直选最小的替代原数组。这种排序是非原址的,需要额外的空间。 伪代码非常简单,采用分治的思想: 合并的伪代码: 一趟合并的示意图: 代码实现/*归并排序合并部分*/void merge(int array[], int p, int q, int r) { int n1 =原创 2017-12-02 16:44:50 · 448 阅读 · 0 评论 -
算法导论:c++快速排序
快速排序也采用分治的思想,以最后一个元素为基准把其分成大于它和小于它的两部分,关键在于确定分割点。算法思想一趟快排算法实现安装书上的算法思想,主要要注意 i,j的初始化,i=p-1,j=p 终止条件j=r 每次循环j都要+1移动/*快排分割,p首端,r尾端,i控制小于,j控制大于*/int quick_partition(int array[], int p, int r){原创 2017-12-01 19:47:48 · 300 阅读 · 0 评论 -
算法导论:c++堆排序&优先队列
预习了一下算法导论的堆排序,以前数据结构课简直是一知半解。 建大根堆的过程为从数组中间向左遍历,然后不断调整左右子树使得最大数处于根节点。一开始以为堆排序一定要用二叉树还写了个傻傻的建树程序。。。数组调整为大根堆/*调整大根堆*/void max_heapify(int data[], int cur, int heapsize){ int left = 2 * cur + 1;原创 2017-11-30 20:22:58 · 599 阅读 · 1 评论 -
算法导论:c++实现图
图的表示这里用结构体来表示图G,和图顶点GraphNode,后面要用到的顶点颜色用枚举类型表示enum color{ white = 0, gray, black};struct graphNode { char name; //顶点名 struct graphNode *pre; //前驱节点 int d; //深...原创 2018-02-26 17:25:08 · 898 阅读 · 0 评论