- 博客(24)
- 收藏
- 关注

转载 归并排序
归并排序是利用"归并"技术来进行排序。归并是指将若干个已排序的子文件合并成一个有序的文件。常见的归并排序有两路归并排序(Merge Sort),多相归并排序(Polyphase Merge Sort),Strand排序(Strand Sort)。下面介绍第一种:(一)两路归并排序最差时间复杂度:O(nlogn)平均时间复杂度:O(nlogn)最差空间复杂度:O(n)稳定
2016-05-03 19:57:01
315

转载 快速排序
高快省的排序算法有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,就是一个用来参照的数,待会你就知道它用来做啥的了)。为了方便,就让第一个数6作为基准数吧。接下来,需要将这个序列
2016-04-29 15:43:51
159

转载 选择排序和堆排序
选择排序算法就是每一趟从待排序的记录中选出关键字最小(最大)的记录,顺序放在已排好序的子文件的最后(最前),直到全部记录排序完毕。常见的选择排序有直接选择排序(Selection Sort),堆排序(Heap Sort),平滑排序(Smooth Sort),笛卡尔树排序(Cartesian Sort),锦标赛排序(Tournament Sort),循环排序(Cycle)。下面介绍前两种:(
2016-04-15 16:18:10
289

转载 插入排序
插入排序的基本思想是每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。常见的插入排序有插入排序(Insertion Sort),希尔排序(Shell Sort),二叉查找树排序(Tree Sort),图书馆排序(Library Sort),Patience排序(Patience Sort)。下面介绍前两种:(一)直接插入排序最
2016-04-15 10:41:46
234
转载 冒泡算法
void BubbleSort(elemtype x[],int n) //时间复杂度为0(n*n);{int i,j;elemtype temp;for(i=1;ifor(j=0;j{if(x[j].key>x[j+1].key){temp=x[j];x[j]=x[j+1];x[j+1]=temp;}}}//补充一个改进的冒泡算法:
2016-07-22 15:55:58
267
转载 C++虚函数表剖析
关键词:虚函数,虚表,虚表指针,动态绑定,多态一、概述为了实现C++的多态,C++使用了一种动态绑定的技术。这个技术的核心是虚函数表(下文简称虚表)。本文介绍虚函数表是如何实现动态绑定的。二、类的虚表每个包含了虚函数的类都包含一个虚表。 我们知道,当一个类(A)继承另一个类(B)时,类A会继承类B的函数的调用权。所以如果一个基类包含了虚函数,那么其继承类也可调用
2016-07-04 10:00:03
374
转载 string的构造函数和拷贝构造函数
在C++中,对于一个空的类,编译器一般默认它会有4个成员函数:构造函数,析构函数,复制构造函数和赋值函数。对于初学者而言,构造函数一定是要知道的:它的功能就是在创建一个新的对象的时候给数据成员赋初值,也就是给对象做初始化。析构函数则是用来释放一个对象,在对象删除之前用它来做一些内存释放等的清理工作,与构造函数的功能相反。 关于类的构造函数和析构函数的典型应用:在构造函数中用new来为
2016-07-01 14:58:05
413
转载 typedef常见用法
typedef常见用法1.常规变量类型定义例如:typedef unsigned char uchar描述:uchar等价于unsigned char类型定义 uchar c声明等于unsigned char c声明2.数组类型定义例如: typedef int array[2];描述: array等价于 int [2]定义; array a声明等价于int a
2016-06-24 14:35:29
234
转载 操作系统知识点
1. 进程的有哪几种状态,状态转换图,及导致转换的事件。状态:1)就绪状态 进程已获得除处理机外的所需资源,等待分配处理机资源,只要分配到CPU就可执行。在某一时刻,可能有若干个进程处于该状态。 2)运行状态 占用处理机资源运行,处于此状态的进程的数目小于等于CPU的数目。 3)阻塞状态 由于进程等待某种条件(如I/O操作或进程同步),在条件满足之前
2016-05-24 15:39:58
431
转载 平衡二叉树 之 红黑树
1. 红黑树的特性Red-Black Tree ( RBT)也是一种自平衡二叉树,其统计性能要好于 AVL树 。它是在1972年由 鲁道夫·贝尔 发明的,它现代的名字是在 Leo J. Guibas 和 Robert Sedgewick 于1978年写的一篇论文中获得的。它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的。[参考Wiki]一般的,红黑树同时
2016-05-05 14:41:08
260
转载 平衡二叉树 之 AVL树
AVL树是最先发明的自平衡二叉查找树。AVL树以其发明者前苏联学者 G.M. Adelson-Velsky 和 E.M. Landis 名字而命名,他们在1962年的论文《An algorithm for the organization of information》中发表了它。[参考WiKI]AVL树中,一个非常重要的概念为平衡因子(Balance factor),对于任意节点 x ,
2016-05-05 14:40:40
187
转载 二叉查找树BST
给定一个关键字 key 和 一个集合 Collection, 确定这个Collection是否包含给定的key,如果包含,找出该key对应的位置,这个过程为 查找 (Search)。如果在 查找 过程中, Collection的结构始终不发生变化,那么称之为静态查找; 反之,需要频繁的向这个集合中添加、删除元素,从这样的集合中进行查找则称之为动态查找。动态查找技术一般用树来存储查找
2016-05-05 14:38:43
274
转载 数组中的逆序对(归并的思想)
解题思路看到这样的题目,最简单的想法就是遍历每一个元素,让其与后面的元素对比,如果大于则count++,但是这样的时间复杂度是o(n2)。这题有更好的解决方法,时间复杂度只需要o(nlogn)。其实这道题目的思路跟归并排序差不多,求逆序对的过程就是一个求归并排序的过程,在求出逆序对以后,原数组变得有序,是通过归并排序得到的。(1)总体的意思就是将数组分成两段,首先求段内的逆序对数量,比如下面两段代
2016-05-04 16:07:47
327
转载 把数组排成最小的数
问题描述:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。例如输入数组{32, 321},则输出这两个能排成的最小数字32132。请给出解决问题的算法,并证明该算法。#include #include #include #include using namespace std; bool compare
2016-05-03 10:11:07
188
转载 字符串初始化指针和初始化数组区别
定义指针时,编译器并不为指针所指向的对象分配空间,它只是分配指针本身的空间,除非在定义时同时赋给指针一个字符串常量进行初始化。在ANSI C中,初始化指针时所创建的字符串常量被定义为只读。如果试图通过指针修改字符串的值,程序就会出现未定义的行为。在有些编译器中,字符串常量被存放在只允许读取的文本段中,以防止它修改。————以上摘自《C专家编程》P87与指针相反,由字符串常量
2016-04-28 09:27:42
583
转载 字符串的全排列
问题:输入一字符串(要求不存在重复字符),打印出该字符串中字符中字符的所有排列。例如:输入"abc",输出结果为abc, acb, bac, bca, cab和cba。方法一:比较笨,用一个整型数组,记录当前排列的下标,然后输出下标对应的字符串,空间代价为O(n) 代码:[cpp] view plain copy print?//参数:字符串,记录当前全
2016-04-27 15:07:27
245
转载 编程题
voidfoobar(inta, int*b, int**c){ int*p = &a; *p = 101; *c = b; b = p;} intmain(){ inta = 1; intb = 2
2016-03-15 20:24:13
275
转载 概念题
32位平台 char 1个字节8位 short 2个字节16位 int 4个字节32位 long 4个字节32位long long 8个字节64位 指针 4个字节32位 64位平台 char 1个字节 short 2个字节 int
2016-03-14 20:02:58
270
转载 百钱买百鸡问题
题目描述公元前五世纪,我国古代数学家张丘建在《算经》一书中提出了“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?详细描述:接口说明原型:int GetResult(vector &list)输入参数: 无输出参数(指针指向的内存区域保证有效): list
2016-03-14 10:01:30
571
转载 strcpy拷贝越界问题
《strcpy拷贝越界问题》一. 程序一#include #include void main() { char s[]="123456789"; char d[]="123"; strcpy(d,s); printf("d=%s,\ns=%s",d,s); } 执行结果:解释:首先要解释一下,char s[]="12345678
2016-02-26 14:08:26
324
转载 重建二叉树
给定一个前序和中序变量的结果,写一个算法重建这棵树:如:前序: a b d c e f中序: d b a e c f前序遍历的每一个节点,都是当前子树的根节点,同时,以对应的节点为边界,就会把前序遍历的结果分为左子树和右子树。a是前序中第一个节点,以a为中界,把中序的结果分成:左:db右:ecf对于db,由于在前序中b在d前面,所以,b
2016-02-25 14:39:37
217
转载 如下为类型CMyString的声明,请为该类型添加赋值运算符函数。
面试题1:赋值运算符函数复制代码题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数。class CMyString{public:CMyString(char *pData=NULL);//构造函数CMyString(const CMyString& str);//拷贝构造函数~CMyString();//析构函数private:
2016-02-24 10:00:14
826
转载 查找输入整数二进制中1的个数
普通法我总是习惯叫普通法,因为我实在找不到一个合适的名字来描述它,其实就是最简单的方法,有点程序基础的人都能想得到,那就是移位+计数,很简单,不多说了,直接上代码,这种方法的运算次数与输入n最高位1的位置有关,最多循环32次。int BitCount(unsigned int n){ unsigned int c =0 ; // 计数器 whi
2016-02-23 14:52:50
255
转载 将m个相同的苹果放进n个相同的盘子中,盘子允许空,有多少种方法
把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。Input第一行是测试数据的数目t(0 Output对输入的每组数据M和N,用一行输出相应的K。Sample Input17 3Sample Output8类型:动态规划问题:将m个苹果放进n个盘子中,盘子允许空
2016-02-23 11:24:05
4811
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人