随笔分类 -  基本算法汇总

摘要:暴雪公司有个经典的字符串的hash公式先提一个简单的问题,假如有一个庞大的字符串数组,然后给你一个单独的字符串,让你从这个数组中查找是否有这个字符串并找到它,你会怎么做?有一个方法最简单,老老实实从头查到尾,一个一个比较,直到找到为止,我想只要学过程序设计的人都能把这样一个程序作出来,但要是有程序员把这样的程序交给用户,我只能用无语来评价,或许它真的能工作,但...也只能如此了。最合适的算法自然是使用HashTable(哈希表),先介绍介绍其中的基本知识,所谓Hash,一般是一个整数,通过某种算法,可以把一个字符串"压缩" 成一个整数,这个数称为Hash,当然,无论如何,一 阅读全文
posted @ 2012-12-21 15:59 陳さん様 阅读(207) 评论(0) 推荐(0)
摘要:二叉排序树的创建,查找与删除,以下代码是其所有左子树的结点均小于根的值,其右子树的值均小于其根的值。点击(此处)折叠或打开#include<stdio.h>#include<malloc.h>typedef int datatype;#define ENDKEY 0typedef struct BSTree{datatype data;struct BSTree *lchild;struct BSTree *rchild;}BSTreenode,*BSTree;typedef struct node{BSTree BST;struct node *next;}Queue 阅读全文
posted @ 2012-12-21 15:57 陳さん様 阅读(258) 评论(0) 推荐(0)
摘要:首先对查找的列表有两个要求:(1)、必须采用顺序存储结构(2)、必须按关键大小有序排列算法思想:首先,将表中间位置记录的关键字与查找关键字比较,如果两者相等则查找成功,否则利用中间位置记录将表分成前后两个字表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复上述过程,知道找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。测试程序如下所示:点击(此处)折叠或打开#include<stdio.h>int Find(int a[],int x,int length){int low,high;int mid;low=1,hig 阅读全文
posted @ 2012-12-21 15:55 陳さん様 阅读(164) 评论(0) 推荐(0)
摘要:算法思想:假设初始序列含有n个记录,首先将这n个记录看成n个有序的子序列,每个子序列的长度为1,然后两两合并,得到[n/2]个长度为2(n为奇数时,最后一个序列的长度为1)的有序子序列。在此基础上再对长度为2的有序子序列进行两两合并,得到若干个长度为4的有序子序列。如此重复,直到得到一个长度为n的有序子序列。测试代码如下所示:点击(此处)折叠或打开#include<stdio.h>void Merge(int a[],int low,int mid,int high,int a3[]){int i=low,j=mid+1,k=low;while((i<=mid)&&a 阅读全文
posted @ 2012-12-21 15:54 陳さん様 阅读(426) 评论(0) 推荐(0)
摘要:思想:从待排序记录序列中选取一个记录(通常选取第一个记录)为枢轴其关键字设为k1,然后将其余关键字小于k1的记录移到前面去,而将关键字大于k1的记录移到后面,结果将待排序序列分成了两个子表最后将关键字为k1的记录查到其分界线的位置处.算法步骤:假设待划分序列为r[left],r[left+1],.......r[right],具体实现上述划分过程时,可以设两个指针i和j,他们的初值分别为left,right.首先将基准记录r[left]移至变量x中,是r[left],即r[i]相当于空单元,然后反复进行如下两个扫描过程,直到i和j相遇(1)j从右向左扫描,直到r[j].key<x.key 阅读全文
posted @ 2012-12-21 15:51 陳さん様 阅读(224) 评论(0) 推荐(0)
摘要:算法思想:首先将与堆相应的完全二叉树根节点中的记录移出,该记录称为待调整记录,此时根节点相当于空节点,从空节点的左右孩子中选出一个关键字较大的记录,如果该记录的关键字大于待调整记录的关键字,则将该记录上移至空节点中。此时,原来的那个关键字较大的节点相当于空节点,从空节点的左右孩子中选出一个关键字较大的记录,如果该记录的关键字仍大于待调整记录的关键字,则将该记录上移至空节点。重复上述过程,直至空节点左右孩子的关键字均小于待调整记录的关键字,此时,将待调整记录放入空节点中,测试代码如下所示:点击(此处)折叠或打开#include<stdio.h>#include<stdlib.h 阅读全文
posted @ 2012-12-21 15:49 陳さん様 阅读(164) 评论(0) 推荐(0)