查找:
就是在数据中寻找特定的值,这个值称为“关键码(key)”。
查找的目的:
就是为了确定数据中是否存在与关键码相同的数据。
一句数据是否已排序,查找的方法也会不同。以下给出了四种不同的查找方法。
顺序查找法
折半查找法
裴波那契查找法
插补查找法
其中顺序查找法是使用未经排序的数据。
另外三种方法都需要将数据先排序好后,然后才能使用。
除了上述的四种查找方法外,在有另两种查找方法:二叉树查找法和散列法。
这两种方法处理的数据结构不一定是数组,可以使用二叉树或者链表结构,这些查找数据都需要先行处理,存储在使用的数据结构后,
才能进行查找的操作。
1.顺序查找法(Sequential Search)
该查找法就如同数组的遍历,从数组的第一个元素开始,检查数组的每一个元素,以便确定是否有查找的数据。
由于是从头检查到尾,所以数组数据是否已经排序已经不重要。
例如:
先使用随机函数生成100个不相同的结构数据元素,然后输入数字,使用顺序查找法找到这个数字,若存在,输出数组索引,若不存在,就直接
注:
就是在数据中寻找特定的值,这个值称为“关键码(key)”。
查找的目的:
就是为了确定数据中是否存在与关键码相同的数据。
一句数据是否已排序,查找的方法也会不同。以下给出了四种不同的查找方法。
顺序查找法
折半查找法
裴波那契查找法
插补查找法
其中顺序查找法是使用未经排序的数据。
另外三种方法都需要将数据先排序好后,然后才能使用。
除了上述的四种查找方法外,在有另两种查找方法:二叉树查找法和散列法。
这两种方法处理的数据结构不一定是数组,可以使用二叉树或者链表结构,这些查找数据都需要先行处理,存储在使用的数据结构后,
才能进行查找的操作。
1.顺序查找法(Sequential Search)
该查找法就如同数组的遍历,从数组的第一个元素开始,检查数组的每一个元素,以便确定是否有查找的数据。
由于是从头检查到尾,所以数组数据是否已经排序已经不重要。
例如:
先使用随机函数生成100个不相同的结构数据元素,然后输入数字,使用顺序查找法找到这个数字,若存在,输出数组索引,若不存在,就直接
输出信息直到输入的数字为-1为止。
代码实现如下:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 100
typedef struct element
{
int key;
}record;
record data[MAX];
int seq_search(int key)
{
int pos;
pos = 0;
while(pos < MAX)
{
if(key == data[pos].key)
return pos;
pos++;
}
return -1;
}
int main(int argc, char **argv)
{
int checked[300];
int i, temp;
long temptime;
srand(time(&temptime) % 60);
for(i = 0; i < 300; i++)
checked[i] = 0;
i = 0;
while(i != MAX)
{
temp = rand() % 300;
if(checked[temp] == 0) //用于检查是否有重复的值
{
data[i].key = temp;
checked[temp] = 1;
i++;
}
}
while(1)
{
printf("\n请输入查找值(0-299) ==> ");
scanf("%d", &temp);
if(temp != -1)
{
i = seq_search(temp);
if(i != -1)
printf("找到查找值:%d[%d]\n", temp, i);
else
printf("没有找到查找值:%d\n", temp);
}
else
exit(1);
}
system("pause");
return 0;
}
注:
标准C库中函数rand()可以生成0~RAND_MAX之间的一个随机数,其中RAND_MAX 是stdlib.h 中定义的一个整数,它与系统有关。
rand()函数没有输入参数,直接通过表达式rand()来引用;例如可以用下面的语句来打印两个随机数:
printf("Random numbers are: %i %i\n",rand(),rand());
因为rand()函数是按指定的顺序来产生整数,因此每次执行上面的语句都打印相同的两个值,所以说C语言的随机并不是真正意义上的随机。
为了使程序在每次执行时都能生成一个新序列的随机值,我们通常通过为随机数生成器提供一粒新的随机种子。函数 srand()(来自stdlib.h)可以为随机数生成器播散种子。只要种子不同rand()函数就会产生不同的随机数序列。srand()称为随机数生成器的初始化器。引自于:http://baike.baidu.com/view/3048977.htm