![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Algorithm
大空新一
这个作者很懒,什么都没留下…
展开
-
快速排序
void quick_sort(int *A, int p, int q) //A为待排数组指针,p为起始编号,q为结尾编号{int x,temp;x = A[p];int i=p+1,j=q;if (i>j){return;}while (i{while (A[i]{i++;}while (A[j]>x&&i{j--;}原创 2013-11-17 19:22:32 · 567 阅读 · 0 评论 -
KMP查找字串算法
代码内容来自《大话数据结构》,程杰著。针对书中源代码进行了修改,原书中字符串数组[0]存储为字符串长度,本代码处未使用该空间,字符串从[0]处开始存储。#include #include void get_next(char *T, int *next) { int i,j, len = strlen(T); i = 0; j = -1; next[0] = -1; whil转载 2015-04-21 11:15:38 · 595 阅读 · 0 评论 -
树的遍历、平衡二叉树实现
代码内容来自《大话数据结构》,程杰著。原书中没有RightBalance函数实现,本处按照LeftBalance实现。#include #include #define LH +1 //左高#define EH 0 //相等#define RH -1 //右高typedef struct BitNode { int data;//结点数据 int bf;//结点平衡转载 2015-04-22 17:27:31 · 599 阅读 · 0 评论 -
各种排序算法的比较
排序问题的解决方案是算法问题当中最多的,常见的有插入排序,选择排序,冒泡排序,归并排序,快速排序,堆排序等,下面将对不同的排序算法进行分析。假设均为实现从小到大排序,计算空间复杂度时,不考虑原本存储元素的空间,只考虑实现算法需要的额外空间。 插入排序的基本思想是:从待排序的元素中选出一个,插入已排好序的元素队列中。重复操作直到所有元素全部被处理完。插入过程可以有两种情况:(1).原创 2014-10-12 08:54:32 · 848 阅读 · 0 评论 -
出栈序列统计
问题描述:栈是常用的一种数据结构,有n令元素在栈顶端一侧等待进栈,栈顶端另一侧是出栈序列。你已经知道栈的操作有两·种:push和pop,前者是将一个元素进栈,后者是将栈顶元素弹出。现在要使用这两种操作,由一个操作序列可以得到一系列的输出序列。请你编程求出对于给定的n,计算并输出由操作数序列1,2,…,n,经过一系列操作可能得到的输出序列总数。输入: 一个整数n输出:原创 2013-12-27 09:02:51 · 3508 阅读 · 0 评论 -
二元查找树变成排序的双向链表
题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。 比如将二元查找树 10 / \ 6 14 / \ / \4 8 12 16转换成双向链表4=6=8=10=12=14=16。思路:基本思路为递归,对某个原创 2014-03-30 16:54:10 · 537 阅读 · 0 评论 -
0-1背包问题
有N件物品和一个容量为T的背包。第i件物品的大小是w[i],价值是v[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。该问题是一个很老的问题,可以用动态规划或者回溯法解决。动态规划的主要思想为自下而上求解该问题,在整个求解过程中,所得到的中间结果被完全保留下来,因为最终最优解的获得是通过这些中间结果得到的,这些中间结果不一定是当前状态下的最优解,但也许会是原创 2013-12-27 19:25:13 · 674 阅读 · 0 评论 -
归并排序
void merger(int *A,int p, int q, int r){int nLeft = q-p+1;int nRight = r-q;int i,j,k;int *pLeft = (int *)malloc(sizeof(int)*(nLeft+1));int *pRight = (int *)malloc(sizeof(int)*(nRight+1));原创 2013-11-17 19:19:41 · 729 阅读 · 0 评论 -
马拦过河卒
题目描述:如图,A点有一个过河卒,需要走到目标B点。卒行走的规则:可以向下、或者向右。同时在棋盘上的任一点有一个对方的马(如上图的C点),该马所在的点和所有跳跃一步(步长为根号5)可达的点称为方马的控制点。例如上图C点上的马可以控制9个点(图中的P1,P2...P8和C)。卒不能通过对方的控制点。棋盘用坐标表示,如A点(0,0)、B点(M, N),同样马的位置坐标是需要给出的(约定:C≠A且C原创 2013-11-16 18:36:16 · 942 阅读 · 0 评论 -
堆排序算法
int nHeapSize = 0;//当前堆大小void Max_Heap(int *A,int i) //调整为大根堆{int left = 2*i;int right = 2*i+1;int large = i;int nSwitchTemp;if (left A[large]){large = left;}if (right A[large原创 2013-11-17 19:02:25 · 666 阅读 · 0 评论