算法导论中的算法实现
一只懒虫
进击的学生
展开
-
堆排序算法的实现(HeapSort)
堆排序的时间复杂度是O(nlgn),是原址排序。这个堆排序主要写了三个函数:Max_heapify:这个是整堆函数,是将i节点整成符合大顶堆的规则,即父节点大于左右孩子节点。我写的这个函数可能和书上的不太一样,有3个参数,由于我用的是静态数组写的,在后面heap_sort函数中会逐渐减小数组元素个数,实际上不是减少,而是因为最后面有排好序的元素了,我们调用整堆函数不能将排好序的元素再整一下原创 2017-09-29 17:32:21 · 403 阅读 · 0 评论 -
快速排序算法的实现(QuickSort)
#include<iostream>using namespace std;#define N 5int Partition(int a[],int p,int r){//划分函数 int x,i; x=a[r]; i=p-1; int j; for(j=p;j<=r-1;j++){ if(a[j]<=x){原创 2017-09-29 17:18:35 · 1133 阅读 · 0 评论 -
分治法实例-找下标,下标与对应值相等
如题:设n个不同的整数排好序后存于T[1..n]中,若存在一个下标i(1≤ i ≤ n),使得T[i]=i。试设计一个有效算法找到这个下标,要求算法在最坏情形下的计算时间为O(log n)。 笔记:一般来说如果没有时间的限制,那么O(n)遍历一遍也就出来了,但是这个要求是O(log n),所以可以考虑分治法,折半查找。#include<iostream>using namespace std;i原创 2017-11-19 22:39:47 · 1617 阅读 · 0 评论 -
c++找众数及其重数
问题描述:在一个由n个元素组成的表中,出现次数最多的元素被称为众数。试写一个寻找众数及其重数的有效算法,并分析其计算时间复杂性。 方法: 1. 首先用快排把数据排个序 2. 再使用find方法找出众数及其重数 注:这里第一步就跳过了,因为快排可以调库函数,这里主要是测试一下find方法的正确性。 代码如下:#include <iostream>using namespace std;vo原创 2017-11-20 11:00:13 · 6893 阅读 · 0 评论 -
最长公共子序列求解算法及代码实现
问题描述: 最长公共子序列问题是在2个序列集合中,查找最长的公共子序列。 比如字符串: s1="ABCDE" s2="ACEF" 那么字符串s1与字符串s2的最长公共子序列就是"ACE" 算法实现: 利用动态规划的方法实现(也叫打表法):2个字符串数组X[m]、Y[n]保存2个序列集合。用一个辅助二维数组,这个二维数组的L[i][j]保存的是X[0…i]和Y[0原创 2017-11-30 17:44:46 · 5633 阅读 · 0 评论 -
c++表达式求值——简易版
问题:本程序表达式求值很简陋,因为:操作数只有0-9,这个比较好改动,但是简易版嘛,就偷个懒操作符只有+ - × / 这个要是加个括号感觉就麻烦大了,时间有限,所以~主要思想:有两个栈,一个保存操作数,一个保存操作符当前字符是数字时,直接入栈当前字符是操作符时,分2种情况 操作符栈空,直接入栈操作符栈非空,把当前的操作符与栈顶的操作符进行优先级的比较。若栈顶操作符优先级>=当前操作原创 2017-11-21 22:45:13 · 6042 阅读 · 0 评论 -
直接算法+动态规划算法求解最大子段和
问题介绍: 在一个有限序列,任意连续的序列的和的最大值,记为最大子段和。 直接算法: 确切的说是改进后的直接算法,时间复杂度是O(n^2) 动态规划算法 规定当子段和为负整数时,字段和为0; 时间复杂度是O(n); 改进的直接算法代码: 动态规划算法代码:原创 2017-11-25 17:51:28 · 3949 阅读 · 1 评论 -
递归求解字符数组全排列问题
问题描述: 编写一个算法,就地生成字符数组 S[1..n]的所有排列,要求算法终止时S[1..n]保持 态成表使S 初始状 态。就地生成表示不使用S以外的数组。 算法分析: 因为是全排列问题,时间复杂度是O(n!),也是最优的时间复杂度。 算法设计:/* *递归求解字符数组的全排列 * */#include <iostream>#include <string>using nam原创 2017-11-26 10:18:21 · 645 阅读 · 0 评论 -
c++链表反转/逆置的思考与解析
文章目录1.代码示例2.图文解释3.思考总结1.代码示例在Clion,用C14标准编译运行通过采用的是有头节点的链表#include <iostream>using namespace std;typedef struct ListNode{ ListNode* next; int val; ListNode():val(0),next(NU...原创 2019-04-04 11:12:09 · 1500 阅读 · 0 评论