数据结构与算法
文章平均质量分 69
zhanghaotian2011
这个作者很懒,什么都没留下…
展开
-
字典法求全排列(非递归的方法)
【字典序法生成全排列】字典序列算法是一种非递归算法。而它正是STL中Next_permutation的实现算法。我们来看看他的思路吧:它的整体思想是让排列成为可递推的数列,也就是说从前一状态的排列,可以推出一种新的状态,直到最终状态。比如说,最初状态是12345,最终状态是54321。其实我觉得这跟我们手动做全排列是一样的。首先是12345,然后12354,然后12435,12453.原创 2013-01-03 15:44:12 · 859 阅读 · 0 评论 -
STL常用string类
string类的构造函数:string(const char *s); //用c字符串s初始化string(int n,char c); //用n个字符c初始化此外,string类还支持默认构造函数和复制构造函数,如string s1;string s2="hello";都是正确的写法。当构造的string太长而无法表达时会抛出length_error异常string类的字符操作:c原创 2013-05-05 09:24:54 · 561 阅读 · 0 评论 -
归并排序和快速排序
分治法有很多算法在结构上是递归的:为了解决一个给定的问题,算法要一次或多次地递归调用其自身来解决相关的子问题。这些算法通常采用分治策略(divide-and-conquier):将原问题划分成n个规模较小而结构与原问题相似的子问题;递归地解决这些子问题,然后再合并其结果,就得到原问题的解。分治模式在每一层递归上都有三个步骤:² 分解(divide):将原问题分解成一系列子问原创 2013-05-04 10:03:17 · 728 阅读 · 0 评论 -
堆排序
自己写的程序实现:值得注意的是:HeapAdust这个函数里面s为最中间的时候,他只有一个子节点的情况 那么 j+1造成数组越界,因此一定要限制 j第二点: 数组的下标从零开始的,因此HeapSort ,最中间的那个s = n/2-1 子节点为 2*s+1 h 2*s + 2,而且最后一个节点不用再比较了#include #include #include原创 2013-05-04 13:01:34 · 655 阅读 · 0 评论 -
递归之我见
我的感觉:之前因为一提到递归就是想到斐波那契数列,就认为递归就是每次都返回一个结果,让上一层的使用,但是里面到底是咋一层层的机制并没有搞清楚,今天看了几篇博客之后,有点感觉了,所以成文。递归我们总是说直接或者间接的调用自己,可是这句话永远都是会说,但是自己却没有理解。现在我的想法是可以把递归的调用当成是调用别的函数,因为函数调用的机制是,例如main()调用其他一个函数原创 2013-04-21 09:21:40 · 3550 阅读 · 1 评论 -
动态规划系列
1. 从上面最顶点到下面最后一排的话,如果谈心算法就是选每一步最大的那个值,但是这样的原则不一定是整个可能选择中最大的那个。除非没有只能选择左右两个的限制。动态规划就是每一层中的每一个点到下面都有自己最佳的路线。也就是每个子问题也是最优的,问题的状态是选的第i行j个那个是最优的,就得选i+1行j或者j+1那个是最优的两个中一个比较大的那个。这是从上往下的过程。从下往上过原创 2013-04-28 16:53:49 · 760 阅读 · 0 评论 -
以容器的方法找数组中的k个最小的数
typedef multiset > intSet;typedef multiset >::iterator setIterator;void GetLeastNumbers_Solution2(const vector& data, intSet& leastNumbers, int k){ leastNumbers.clear(); if(k原创 2013-04-17 15:53:29 · 694 阅读 · 0 评论 -
白话经典算法系列之八 MoreWindows白话经典算法之七大排序总结篇
白话经典算法系列之八 MoreWindows白话经典算法之七大排序总结篇分类: 白话经典算法系列 Windows编程2012-09-10 02:08 6456人阅读 评论(10) 收藏 举报 在我的博客对冒泡排序,直接插入排序,直接选择排序,希尔排序,归并排序,快速排序和堆排序这七种常用的排序方法进行了详细的讲解,并做成了电子书以供大家下载。下载地址为:http转载 2013-04-15 10:45:51 · 733 阅读 · 0 评论 -
白话经典算法系列之四 直接选择排序及交换二个数据的正确实现
直接选择排序和直接插入排序类似,都将数据分为有序区和无序区,所不同的是直接播放排序是将无序区的第一个元素直接插入到有序区以形成一个更大的有序区,而直接选择排序是从无序区选一个最小的元素直接放到有序区的最后。 设数组为a[0…n-1]。1. 初始时,数组全为无序区为a[0..n-1]。令i=02. 在无序区a[i…n-1]中选取一个最小的元素,将其转载 2013-04-15 10:43:46 · 462 阅读 · 0 评论 -
快速排序(算法导论实现)
版本一:QUICKSORT(A, p, r)1 if p 2 then q ← PARTITION(A, p, r) //关键3 QUICKSORT(A, p, q - 1)4 QUICKSORT(A, q + 1, r)数组划分快速排序算法的关键是PARTITION过程,它对A[p..r]进行就地重排:PARTITIO原创 2013-02-28 15:33:07 · 771 阅读 · 0 评论 -
归并排序(合并排序)
漫谈经典排序算法:四、归并排序(合并排序)分类: Data Structures And Algorithms算法merge数据结构c目录(?)[+]1、序言这是《漫谈经典排序算法系列》第四篇,解析了归并排序。 各种排序算法的解析请参考如下:《漫谈经典排序算法:一、从简单选择排序到堆排序的深度解析》《漫谈经转载 2013-04-05 11:57:48 · 882 阅读 · 0 评论 -
C语言一个队列的实现
队列也是常用的数据结构之一,下面给出一个链式队列的实现~~头文件Queue.h[cpp] view plaincopy#ifndef Queue_H #define Queue_H typedef int Item; typedef struct node * PNode; typedef struct nod转载 2013-04-04 15:21:09 · 760 阅读 · 0 评论 -
C语言一个栈的实现
栈是常用的数据结构之一,下面给出一个链式栈的实现~~头文件Stack.h[cpp] view plaincopy#ifndef Stack_H #define Stack_H typedef int Item; typedef struct node * PNode; /*定义栈节点类型*/ typede转载 2013-04-04 15:19:25 · 797 阅读 · 0 评论 -
2012微软暑期实习笔试题
1、Suppose that a selection sort of 80 items has completed 32 iterations of the main loop. How many items are now guaranteed to be in their final spot (never to be moved again)?A、16 B、31 C、32转载 2013-04-04 22:53:39 · 1368 阅读 · 0 评论 -
堆排序
void Swap(int &x,int &y){ int temp = x; x = y; y = temp;}引用调用,不然数组的两个元素并未真正的交换值。数组堆化只是符合二叉堆的要求而已,只是根是最小的而已,堆排序就是第一次 把这个最小的数与数组最后一个数交换,然后下次把剩下的n-1个数从新弄成最小堆,此时根元素是第二个最小的数,再把根元素跟到第二原创 2013-01-14 19:20:52 · 519 阅读 · 0 评论 -
红黑树的理解
正如在CLRS中定义的那样(译者: CLRS指的是一本著名的算法书Introduction to Algorithms,中文名应该叫算法导论,CLRS是该书作者Cormen, Leiserson, Rivest and Stein的首字母缩写),一棵红黑树是指一棵满足下述性质的二叉搜索树(BST, binary search tree): 1. 每个结点或者为黑色或者为红色。 2. 根转载 2013-01-03 22:36:55 · 719 阅读 · 0 评论 -
秒杀掉:99%的海量数据处理面试题
教你如何迅速秒杀掉:99%的海量数据处理面试题作者:July出处:结构之法算法之道blog前言 一般而言,标题含有“秒杀”,“99%”,“史上最全/最强”等词汇的往往都脱不了哗众取宠之嫌,但进一步来讲,如果读者读罢此文,却无任何收获,那么,我也甘愿背负这样的罪名,:-),同时,此文可以看做是对这篇文章:十道海量数据处理面试题与十个方法大总结的转载 2013-01-03 22:15:14 · 1055 阅读 · 1 评论 -
从头到尾彻底解析Hash 表算法
十一、从头到尾彻底解析Hash 表算法作者:July、wuliming、pkuoliver 出处:http://blog.csdn.net/v_JULY_v。 说明:本文分为三部分内容, 第一部分为一道百度面试题Top K算法的详解;第二部分为关于Hash表算法的详细阐述;第三部分为打造一个最快的Hash表算法。------------------------转载 2013-01-03 22:13:37 · 533 阅读 · 0 评论 -
链表操作练习——学生信息链表
1 #include 2 #include 3 #define LEN sizeof(struct student) 4 5 /*----------------数据定义----------------------*/ 6 7 //定义一个学生信息的结构体,包括学号,姓名和结构体类型的指针 8 struct student 9 { 10 lon转载 2013-09-29 23:24:55 · 1288 阅读 · 0 评论