查找算法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了查找算法相关的知识,希望对你有一定的参考价值。
查找算法是典型的常用算法,查找算法对综合效率要求比较高,常用的查找算法有很多种,本文主要介绍顺序查找和折半查找(二分查找),更多的查找算法还请小伙伴们自行研究。
头文件:
/*****************************************************************************************************
*Copyright:Yue Workstation
*
*FileName:Seek.h
*
*Function:查找相关数据定义和函数声明
*
*Author:Abel Lee
*
*CreateOn:2012-2-9
*
*Log:2012-2-9 由Abel Lee创建
*****************************************************************************************************/
#ifndef SEEK_H
#define SEEK_H
#include "global.h"
typedef struct SeekNode
{
ElemType *elem;
int length;
}SSTable;
int CreateTable(SSTable *ST, int n);
void PrintTable(SSTable ST);
int SequentialSearch(SSTable ST,ElemType key);
void DestroyTable(SSTable *ST);
int SearchBin(SSTable ST, ElemType key);
#endif
源文件:
/*****************************************************************************************************
*Copyright:Yue Workstation
*
*FileName:Queue.c
*
*Function:排序基本算法
*
*Author:Abel Lee
*
*CreateOn:2012-2-9
*
*Log:2011-2-9 由Abel Lee创建
*****************************************************************************************************/
#include "../inc/Seek.h"
/****************************************************************************************************
*Function Name: CreateTable
*
*Function: 创建一个表
*
*Parameter: ST:表头指针
* n:表长度
*
*Return Value:成功返回0,失败返回-1
*
*Author:Abel Lee
*
*Log:2011-2-9
***************************************************************************************************/
int CreateTable(SSTable *ST, int n)
{
int i = 0;
printf("Creating...
");
if(ST == NULL)
{
perror("ST is NULL!");
return -1;
}
ST->elem = (ElemType *)malloc(n+1);
for(i = 1; i <= n; i++)
{
ST->elem[i] = i;
}
ST->elem[0] = 0;
ST->length = n;
printf("Create SSTable Success!
");
return 0;
}
/****************************************************************************************************
*Function Name: PrintTable
*
*Function: 打印一个表中的内容
*
*Parameter: ST:表头指针
*
*Return Value:无
*
*Author:Abel Lee
*
*Log:2011-2-9
***************************************************************************************************/
void PrintTable(SSTable ST)
{
int i = 0;
for(i = 1; i <= ST.length; i++)
{
printf("%d-->",ST.elem[i]);
}
return;
}
/****************************************************************************************************
*Function Name: DestroyTable
*
*Function: 销毁一个表
*
*Parameter: ST:表头指针
*
*Return Value:无
*
*Author:Abel Lee
*
*Log:2011-2-9
***************************************************************************************************/
void DestroyTable(SSTable *ST)
{
return ;
}
/****************************************************************************************************
*Function Name:SequentialSearch
*
*Function:顺序查表法
*
*Parameter: ST:查找对象
* key:关键字
*
*Return Value:成功返回0,失败返回-1
*
*Author:Abel Lee
*
*Log:2011-2-9
***************************************************************************************************/
int SequentialSearch(SSTable ST,ElemType key)
{
int i = 0;
for(i = 1; i < ST.length; i++)
{
if(ST.elem[i] == key)
{
return i;
}
}
return 0;
}
/****************************************************************************************************
*Function Name:SequentialSearch
*
*Function: 折半查表法,针对于有序表
*
*Parameter: ST:查找对象
* key:关键字
*
*Return Value:成功返回0,失败返回-1
*
*Author:Abel Lee
*
*Log:2011-2-9
***************************************************************************************************/
int SearchBin(SSTable ST, ElemType key)
{
int low = 1;
int high = ST.length;
int mid = 0;
while(low <= high)
{
mid = (low + high)/2;
if(key == ST.elem[mid])
{
return mid;
}
else if(key < ST.elem[mid])
{
high = mid - 1;
}
else
{
low = mid + 1;
}
}
return 0;
}
以上是关于查找算法的主要内容,如果未能解决你的问题,请参考以下文章
有人可以解释啥是 SVN 平分算法吗?理论上和通过代码片段[重复]