摘要: 查数据无论是在生活中还是在计算机中都十分常见。常见的查找算法有顺序查找,二分查找和哈希查找。
顺序查找就是挨个挨个比对,其时间复杂度为O(n),由于比较简单,所有没有写。
二分查找针对的是有序的数据,其时间复杂度为O(log n)每一次取中点值与要查找的数据进行对比,直到找到为止。
哈希查找,核心思想是用空间换时间,在数据无重复的情况下,其时间复杂度为O(1),如果有数据重复,其查找次数取决于重复的个数以及重复数据存储方法。重点是在初始化的时候,我们要通过数据知道他的存储位置,从而实现无重复时一次找到,下面的代码使用较简单的除数取余法获得数据存放地址 (下标),并且通过线性探测再散列(顺移)的方法解决冲突。其重点是在初始化的时候处理数据存放的位置
一.折半查找
1)创建
typedef struct node
{
int key;
char data;
}*nodePtr;
typedef struct list
{
int length;
nodePtr elements;
}*listPtr;
2)初始化
listPtr binarySearchInit(int paraLength,int* paraKeyArray,char* paraDataArray)
{
int i;
listPtr resultList = (listPtr)malloc(sizeof(struct list));
resultList->length = paraLength;
//我们第零个位置不用,数组大小申请n+1个;
resultList->elements = (nodePtr)malloc(sizeof(struct node)* (paraLength + 1));
for(i = 0;i < paraLength;i ++)
{
resultList->elements[i + 1].key = paraKeyArray[i];
resultList->elements[i + 1].data = paraDataArray[i];
}
return resultList;
}
3)查找函数
char binarySearch(listPtr paraList,int paraKey)
{
int tempLeft = 1;
int tempRight = paraList