
Algorithm
文章平均质量分 82
qinxd8523
这个作者很懒,什么都没留下…
展开
-
归并排序原理和JAVA实现
归并排序需要两个部分,第一个是归并(merge)部分, 第二个是排序(sort)部分。一、原理1、merge部分先定义以下变量int start; 起始点int end; 终止点(包含)int part; 分离点假设数组从start到part(包含)部分是排好序的,从part+1到end(包含)部分也是有序的,归并过程就是把start到end的所有元素进行排序。归并过程主要分三个主要步骤1)定义两个数组int[] left; 保存start到part(包含)部分的数据int[] r原创 2010-12-17 22:58:00 · 711 阅读 · 1 评论 -
动态规划之最长公共子序列(LCS)
<br />1、代码<br />public class LongestCS { private static final int m = 10; private static final int n = 20; public int[][] Lcs = new int[m][n]; public int[][] flag = new int[m][n]; public int LCS(char[] X, char[] Y, int i, int j ){ if(i>=0 && j原创 2011-01-10 14:54:00 · 261 阅读 · 0 评论 -
POJ 3176题 DP
POJ 3176 DP 动态规划 Dynamic Programming原创 2011-01-10 20:49:00 · 306 阅读 · 0 评论 -
字符串的最长没有重复字符字串长度
求给定字符串中最长没有重复字符的字串长度动态规划 Dynamic Programming DP原创 2011-01-11 20:15:00 · 363 阅读 · 0 评论 -
POJ 2485题 Highways 并查集+Kruskal算法
POJ 2485题 Highways 并查集 Kruskal算法原创 2011-01-14 15:50:00 · 287 阅读 · 0 评论 -
Algorithm
1.把二元查找树转变成排序的双向链表 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。 10 / / 6 14 / / / / 4 8 12 16 转换成双向链表4=6=8=10=12=14=16。 首先我们定义的二元查找树 节点的数据结构如下: struct BSTreeNode{ int m_nValue; // value of node BSTreeNode *m_转载 2011-01-16 15:04:00 · 327 阅读 · 0 评论 -
单链表就地逆置 单链表合并
#include #include using namespace std;typedef struct _Node{ int data; struct _Node *next;}Node;typedef struct _LinkedList{ Node *head;}LinkedList;void init(LinkedList *L){ if(L == NULL) return; L->head = NULL;}void insert(Lin原创 2011-01-17 16:59:00 · 445 阅读 · 0 评论 -
Shell排序
Algorithm Shell排序 插入排序 比较排序原创 2011-01-20 13:59:00 · 310 阅读 · 0 评论 -
POJ 2485题 Highways Prim算法
POJ 2485 图论 Prim算法 最小优先级队列 二叉堆原创 2011-01-17 16:04:00 · 315 阅读 · 0 评论 -
POJ 1088题 DP
POJ 1088 滑雪 DP 动态规划原创 2011-01-12 15:05:00 · 820 阅读 · 0 评论 -
2503题的Hash解法
POJ Hash 字符串 拉链法原创 2011-01-06 19:05:00 · 257 阅读 · 0 评论 -
2503题Trie树实现
POJ 2503 Trie Tree 字典树原创 2011-01-06 16:09:00 · 246 阅读 · 0 评论 -
快速排序原理和JAVA实现
一、原理快速排序分2部分,partition和sort1、partition 这个过程先从待排序数组source(int[] source)中取出一个元素做key,然后根据key,将数组分为两部分,key左边的比key小,key右边的不比key小(或者左边小于等于key,右边大于等于key)。 1)选取key 这个一般选取数组最后一个元素,或者随机选择,然后和数组最后一个元素进行交换,最终的目的是让数组最后一个元素成为key,至于为什么这么做,请看第2)部分。 2)分组 要想将原创 2010-12-18 00:02:00 · 726 阅读 · 0 评论 -
计数排序原理和JAVA实现
计数排序不是基于比较的排序,如果待排序数据的范围在0~k之间,那么它的时间复杂度是O(k+n)的。原理如下:首先假设待排序数据的范围在0~k之间,而且都是整数。定义一个辅助数组int[] C = new int[k+1]。对于待排序数组source中任一个元素source[i](i>=0 && i这里需要注意,我没有说它一定在输出数组的num-1处,因为有元素相等的情况,但可以这么说,它在输出数组result中的最大下标是num-1。JAVA代码如下:package sort;import java.u原创 2010-12-17 16:40:00 · 677 阅读 · 1 评论 -
冒泡排序原理和JAVA实现
冒泡排序是一种比较排序,下面我实现一个从小到大的冒泡排序:先定义两个变量: 待排序数组:int[] source; 数组长度 length = source.length;原理如下:1、有length-1次循环,每次参与循环的是未排序的数。第一次参与循环的是整个数组,因为假设整个数组是无序的。 每次循环需要设置一个标志位: boolean flag = false;表示循环过程中是否产生了交换。2、循环过程中, 相邻的两个元素进行比较,如果source[j] > source[j+1]原创 2010-12-17 16:23:00 · 2233 阅读 · 1 评论 -
堆排序的C实现
#include #include //交换两个变量的值void swap(int *a, int *b){ int temp = *a; *a = *b; *b = temp;}//保持最大堆的特性void maxHeapify(int source[], int top, int heapSize){ int left, right; int max; left = 2*top+1; right = left+1; max = top; if(原创 2010-12-26 23:06:00 · 208 阅读 · 0 评论 -
字符串匹配之KMP算法
字符串匹配 算法导论 KMP 有限自动机原创 2010-12-31 11:39:00 · 210 阅读 · 0 评论 -
1002题的HASH解法
Hash 除法散列 开放寻址 Open addressing原创 2011-01-04 16:48:00 · 224 阅读 · 0 评论 -
3349题的Hash解法
POJ 3349 Hash 除法散列法 双重散列 开放寻址 Open address原创 2011-01-05 09:10:00 · 284 阅读 · 0 评论 -
1840题Hash解法
POJ 1840 Hash 除法散列 乘法散列 双重散列 开放寻址 Open address 拉链法原创 2011-01-06 11:35:00 · 251 阅读 · 0 评论 -
求数组中第二大的数
<br />#include <iostream>using namespace std;const int N = 10;const int MIN_NUM = -36767;int SecondMax(int *a, int n){ if(a == NULL || n<=0) return MIN_NUM; int max = a[0]; int secmax = a[0]; if(n>1 && a[1] < a[0]){ //如果元素大于1,则选择前2个元素中原创 2011-02-25 16:44:00 · 549 阅读 · 0 评论