- 博客(13)
- 资源 (6)
- 收藏
- 关注
原创 算法导论第三版第四章 最大子数组和的三种解法(暴力、教材分治法、线性解法)
1.暴力求解法该方法的思想非常简单,先找出从第1个元素开始的最大子数组,而后再从第2个元素开始找出从第2个元素开始的最大子数组,依次类推,比较得出最大的子数组。实现代码如下:/* 常规方法,时间复杂度O(n*n) 先从第一个元素开始向后累加, 每次累加后与之前的和比较,保留最大值, 再从第二个元素开始向后累加,以此类推。 */ int MaxSubSum1(int *ar
2017-12-02 11:24:05 1063
原创 算法导论第三版-思考题2-1
在合并排序中对小数组采用插入排序,代码如下:#include#includeusing namespace std;int* Insert_sort(int A[],int B[],int p,int q,int r);void Merge(int A[],int p,int q,int r);void Merge_sort(int A[],int p,int r,int k);v
2017-12-01 11:17:13 1791 1
原创 C++中虚析构函数的作用
我们知道,用C++开发的时候,用来做基类的类的析构函数一般都是虚函数。可是,为什么要这样做呢?下面用一个小例子来说明: 有下面的两个类:class ClxBase{public: ClxBase() {}; virtual ~ClxBase() {}; virtual void DoSomething() { cout "Do
2017-12-22 15:27:10 152
原创 排序算法详解【归并排序-Merge_Sort】
核心思想:分治。主题流程:先将一个序列分成很多个不能再分割的子序列,将各个子序列分别排序后再将子序列合并。其实就是重复两个步骤:【1】分【2】合并。首先是第一个小问题,怎么分?比如说一个序列:12 ,23,1,44,233,10,9,8。我们先分成两段:12 ,23,1,44 和 233,10,9,8,发现还能再分成4段:12 ,23 和 1,44------233
2017-12-16 16:08:07 332
原创 二叉树的递归遍历(思路简单清晰)
预先建立用数组表示的二叉树的内容,然后建立二叉树,并进行前序、中序、后序遍历的操作,代码如下:#include#includeusing namespace std;class tree {public: int data; class tree *left, *right;};typedef class tree* btree;btree create_tree(btre
2017-12-14 11:31:19 2006
原创 算法导论第三版第十章 单链表实现栈和队列(思路简单清晰)
1.单链表实现栈虽然以数组结构来实现栈的好处是算法设计简单,但如果栈的大小可改变的话,由于数组的大小需事先声明,这时必须使用最大可能性的数组空间来考虑,这样会造成内存空间的浪费。而利用链表来实现栈的优点是随时可以动态改变链表长度。代码如下:#include#include#includeusing namespace std;class listnode {public: in
2017-12-09 10:35:29 461
原创 为什么函数声明和定义中的一维数组形参无须写明元素数目
因为函数并不为数组参数分配内存空间。形参只是一个指针,它指向的是已经在其他地方分配好内存的空间,这个事实解释了为什么数组形参可以与任何长度的数组匹配——它实际传递的只是指向数组第一个元素的指针。
2017-12-08 20:50:17 1200
原创 算法导论第三版第七章课后答案
7.1-1 参照图7-1的方法,说明PARTITION在数组A={13,9,9,5,12,8,7,4,21,2,6,11}上的操作过程。A={13,19,9,5,12,8,7,4,21,2,6,11} ={13,19,9,5,12,8,7,4,21,2,6,11} ={13,19,9,5,12,8,7,4,21,2,6,11} ={9,19,13,5,12
2017-12-07 10:22:20 3403
原创 生成范围在[a,b]之中的随机整数
生成a到b之间的随机数==>int i = rand()%(b-a) + a;原理:对于任意整数a,b有:0 于是:0+a 即:a
2017-12-07 10:16:01 2751
原创 算法导论第三版第七章快速排序(一般和随机化版本)
快速排序是利用交换操作的排序,所以不是稳定排序法,最快及平均时间复杂度为O(nlogn),最坏为O(n*n)。步骤:(1)分解:数组A[p...r]被划分为两个子数组A[p...q-1]和A[q+1...r],使得A[p...q-1]中的每一个元素都小于等于A[q],而A[q]也小于等于A[q+1...r]中的每个元素。(2)解决:通过递归调用快速排序,对于子数组A[p...q-1]和
2017-12-07 10:07:47 599
原创 堆和栈的区别
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两
2017-12-05 20:16:13 142
原创 算法导论第三版第六章 合并K个有序链表的三种解法(最小堆法和分治递归法)
题目要求是将k个有序链表合并为一个链表,时间复杂度限定为O(nlogk)。下面给出应用最小堆方法的两个程序,最后再贴上利用分治递归法的代码,虽然时间复杂度不及堆方法,但思路相对简单好理解。(1)最小堆方法1用一个大小为K的最小堆(用优先队列+自定义降序实现)(优先队列就是大顶堆,队头元素最大,自定义为降序后,就变成小顶堆,队头元素最小),先把K个链表的头结点放入堆中,每次取堆顶元素,然后将
2017-12-05 16:40:21 3151
原创 算法导论第三版-第6章堆排序操作完整代码(建堆、插入、删除、排序等)
程序如下:// heap_sort.cpp : 定义控制台应用程序的入口点。//#include#includeusing namespace std;#define N 1000#define PARENT(i) (i)>>1#define LEFT(i) (i)<<1;#define RIGHT(i) ((i)<<1)+1class Heap{public: /
2017-12-04 16:50:50 517
2018华为软件精英挑战赛复赛代码 by java()
2018-05-03
2018华为软件精英挑战赛初赛代码85分版本基于C
2018-05-03
基于qt的截图工具,实现截图后进行多种编辑,采用仿QQ截图控制面板
2017-10-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人