算法导论算法
文章平均质量分 65
feidewu
这个作者很懒,什么都没留下…
展开
-
快速排序(二)
第二种快速排序,与快排(一)唯一不同的地方是Partition()函数,两者技巧不同,本质都一样都是实现一次快排。// QuickSort2.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#includeusing namespace std;#include void QuickSort(int array[], int l原创 2012-09-19 18:14:09 · 426 阅读 · 0 评论 -
堆排序
算法导论中堆排序:建最大堆:从最后一个子树根节点开始自顶向下调整成一个最大堆子树,再调整倒数第二个子树。。。。。最后调整整棵树的根节点和他的孩子。堆排序:每次将第一个元素与最后一个元素交换,堆大小减一,在重新调整堆成最大堆,直至剩一个元素。// BuildMinHeap.cpp : 定义控制台应用程序的入口点。//堆排序:先建立一个最大堆,在排序#include "stda原创 2012-09-19 18:27:45 · 394 阅读 · 0 评论 -
快速排序(一)
算法导论中的快速排序算法:// QuickSort1.cpp : 定义控制台应用程序的入口点。#include "stdafx.h"#include using namespace std;#include void QuickSort(int array[], int low, int high);int PARTITION(int array[], int原创 2012-09-19 18:05:16 · 404 阅读 · 0 评论 -
创新工厂笔试题------数组反序个数
创新工场笔试题:给定一整型数组,若数组中某个下标值大的元素值小于某个下标值比它小的元素值,称这是一个反序。即:数组a[]; 对于i a[j],则称这是一个反序。给定一个数组,要求写一个函数,计算出这个数组里所有反序的个数。创新工场的这道求反序个数的题就是算法导论中的题目。其实是对归并排序做些修改,算法的复杂度是nlgn。程序代码如下://算法思想:并归排序数组原创 2012-09-20 21:55:06 · 2001 阅读 · 3 评论 -
归并排序算法
归并排序算法采用分治的策略:将原问题划分成n个规模较小的子问题,递归解决这些子问题,合并其结果就得到原问题的解。将n个元素分成含n/2个元素的子序列,用递归对序列排序,当子序列的长度为1时递归结束,再和并子序列的结果。题目:给出一个时间复杂度为nlgn的算法,使之能在给定一个由n个元素构成的集合s和一个元素x,判断出s中是否存在两个其和等于x的元素。// merge.cpp : 定义控原创 2012-09-20 21:35:00 · 832 阅读 · 3 评论 -
矩阵链乘法
给定有n个要相乘的矩阵构成的序列(链),要计算乘积A1A2.....An。一组矩阵是加全部括号的。矩阵链加括号对运算的性能有很大影响。 仅当两个矩阵A和B相容(即A的列数等于B的行数),才可以进行相乘运算。如果A是一个p×q矩阵,B是q×r矩阵,结果C是p×r的矩阵。计算C的时间由乘法运算次数决定的,次数为p×q×r。 矩阵链乘法问题可表述为:给定n个矩阵构成的一个链,原创 2012-10-13 12:41:15 · 4367 阅读 · 0 评论 -
插入法建堆
插入法建堆是将数组A中的元素逐个插入到数组B中建立一个堆。每插入一个关键字就与其父节点的关键字比较大小,如果父节点的关键字较小则交换,然后依次自低地向上调整使之符合大(小)顶堆的特性。插入法建堆与调整法建堆可能结果不一样。调整法建堆是自底向上依次调整,一棵子树中最大的节点值与根节点交换,最小的那个节点位置在本次调整中不作改变。而插入法建堆结果与插入的顺序和值大小有关。以大顶堆为例,在某棵已原创 2012-09-26 11:31:41 · 6440 阅读 · 1 评论 -
根据数组中数字出现频率排序
不知道是那个面试题目,题目大概意思就是数组中不多于10个一位的数字(0--9),根据数字出现的频率从大到小排序,频率相同的按照数值大小排序,最后输出排序后的结果。例如数组数据:arrayA[10]={1,1,2,3,4,4,6,7,7,7}; 根据频率排序后结果是:7 7 7 4 4 1 1 2 3 6; 再根据频率相同时按照数值大小排序,最后结果是: 7 7 7 4 4 1 1 6 3 2.原创 2012-10-27 23:07:50 · 7225 阅读 · 1 评论 -
最简单的贪心算法--删除数字问题
给出一个N个数字的数字序列,删除n(n分析:将数字序列保存在数组中,每删除一个数字都使剩下的数字组成的正整数最大,并且以它作为下一个删除对象。删除n个数字的全局最优解包含删除一个数字的子问题的最优解。每次删除一个数字,从左往右每相邻的两个数字比较,若左边小于右边则删除左边的那个数字,否则比较下一对数字。每次删完一个数字,后面的元素前进一个位置,并且从头开始比较。代码:#include原创 2012-10-25 17:11:26 · 8657 阅读 · 1 评论