![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法导论笔记
文章平均质量分 59
Mr_wunai
这个作者很懒,什么都没留下…
展开
-
算法导论笔记之----合并排序
合并排序,思想很简单,先分再合,这种算法不仔细看,很容易以为是快速排序。实际上相差很大。合并排序,每次分,都是取中间的一个位置,然后用递归,将一组T个数据分成T组一个数据的数组,然后再合并起来。(都是根据数组的下标进行运算,所以从0开始)///合并排序#includeusing namespace std;void m_sort(int *arr,int begin,int middle,i原创 2012-07-24 08:55:35 · 402 阅读 · 0 评论 -
算法导论笔记之----二叉搜索树的插入、删除、搜索操作
#includeusing namespace std;struct tree{ int Key; tree *left; tree *right;};void SetNull(tree *&Root,int x);void Insert(tree *&Root,int x){ if(Root==NULL) { Root=new tree; Ro原创 2012-07-24 08:15:25 · 594 阅读 · 0 评论 -
算法导论笔记之---合并排序应用之求逆序数
逆序数:在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。这是百度百科里的定义。如 4 7 6 8 5 1 3 2 逆序数为20 在我所了解中求逆序数有两种思路:一种是求出数列a[n]中排列在a[i]前面比a[i]大的数的个数,然后将n个数求和即为逆序数。另一种是求出数列a[n]中排列在a[i]后面比a[i]小的数的个数,然后将N个数求和。原创 2012-07-24 13:35:34 · 467 阅读 · 0 评论 -
算法导论笔记之----堆排序
最大堆,父节点大于它的孩子节点的值。。。先采用递归的方法,建立一个最大堆,然后将堆的最高父节点与当前所保留的树最后一个节点交换,同时去掉最后一个节点,将剩余树从新建堆。。#includeusing namespace std;void Buildhead(int *arr,int parent,int longth){ int lagest; if(parent*2+1<=l原创 2012-07-24 09:08:38 · 387 阅读 · 0 评论 -
算法导论笔记之---插入排序
//插入排序#includeusing namespace std;void Insert(int *arr,int Count){ for(int i=1;i<Count;++i) { int Now=i; for(int j=i-1;j>-1;--j) if(arr[Now]<arr[j]) swap(arr[Now--],arr[j]); else原创 2012-07-24 08:39:42 · 314 阅读 · 0 评论 -
算法导论笔记之----随机快速排序
根据算法导论的描述,我们知道快排虽好,但是也有情况是O(n^2),这种情况下每次划分都是 n-1 和1个元素 此时还不如插入排序的效率。所以引进了随机快速排序。原理是在我们排序的范围,随机产生一个数,然后将该数对应的数组值与数组排序的第一个数字交换,然后再进行普通的快速排序。。#include#define random(x) (rand()%(x))using namespace std;原创 2012-07-24 09:45:47 · 473 阅读 · 0 评论 -
算法导论笔记之----双向链表
#includeusing namespace std;typedef int Element;struct Node{ Element Num; Node *parent; Node *next;};class Lnode{public: Lnode(); void creat(); bool find(Element);//判断某个元素是否在链表中 void原创 2012-07-26 16:43:50 · 388 阅读 · 0 评论