Algorithm
文章平均质量分 55
haozlee
多年linux开发经验,熟悉c++,python。个人主页:https://leehao.me
展开
-
字符串的全排列
《程序员面试攻略(第二版)》中第七章的一道题目。题目是这样子的:实现一个例程,打印出一个字符串字符的所有可能顺序,即,打印这个字符串中所有字符的全排列。将输入字符串中每个字符作为一个独立的字符,即使它们发生重复。对于字符串”aaa”,您的例程应该打印出6个”aaa”。递归思想可以解决。其算法的主要思路如下:如果超过了最后一个位置 打印这个字符串 返回原创 2011-10-13 10:52:24 · 1525 阅读 · 0 评论 -
合并排序
合并排序使用了“分治法”的策略。“将原问题划分成n个规模较小而结构与原问题相似的子问题;递归地解决这些子问题;然后合并其结果,就得到原问题的解。”这就是分治策略。分治策略在每一层递归上有以下三个步骤:1)分解:将原问题分解成一系列子问题;2)解决:递归地解各子问题;3)合并:将子问题的解合并成原问题的解。 合并排序依照上述策略:1)分解:将n个元素分成两个含n/2个原创 2011-02-10 20:07:00 · 1697 阅读 · 2 评论 -
堆排序
堆排序是一种选择排序算法,但它效率优于直接选择排序,其运行时间为O(nlogn);而且它是一个原地排序算法,需要的空间为O(1)。/*将“堆”看成一棵完全二叉树,用数组存放元素。 *数组从下标为1开始存放元素。 *堆排序是一种“原地”排序算法,其操作均在原数组A[]中进行。 */#include using namespace std;void display(int A[],原创 2011-02-10 23:43:00 · 914 阅读 · 0 评论 -
求最大最小值的O(3n/2)算法
《算法导论》上面第九章开章的算法,简单。貌似《编程之美》上面也有。#include #include //time(0)#include //rand()#include using namespace std;const int MAX_VECTOR_SIZE = 10;int main(){ vector iVec; /*生成随机的一组数*/原创 2011-03-02 16:42:00 · 2444 阅读 · 0 评论 -
动态规划求解最大字段和及其变种问题
动态规划(Dynamic Programming, DP)为一常用算法思想,本文讲述如何利用DP解决常见的最大字段和及其变种问题。一、 最大字段和问题问题定义设数组为a[k]a[k],1≤k≤n1 \le k \le n,最大字段和XX定义为:X=max1≤i≤j≤n{∑k=ija[k]} X=\max_{1\le i \le j \le n}\{\sum_{k=i}^j a[k]\} XX直观含义原创 2015-07-22 00:53:30 · 3883 阅读 · 0 评论 -
递归实现合并两个有序链表
Node* mergAction(Node* head1,Node *head2) { Node *p=NULL; if(head1==NULL&&head2==NULL) return p; else if(head1==NULL) return head2; else if(head2==NULL)原创 2010-12-29 11:08:00 · 1461 阅读 · 0 评论