利用随机函数产生30000个随机整数,进行顺序查找、折半查找,并进行比较。提示:用顺序存储结构。
// 查找
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define numcnt 80000
int num[numcnt];
// 顺序查找
int find_1(int x){
int i;
for( i = 0; i < numcnt; i++){
if(x == num[i]){
return i;
}
}
return -1; // 没有找到
}
// 折半查找:
int find_2(int x){
int low = 0;
int high = numcnt - 1;
int mid;
while(low <= high){
mid = (low+high)/2; //取中值
if(num[mid] == x)
break; //找到,结束循环
else if(num[mid] < x)
low = mid+1; //如果目标值比当前中间值大,说明目标值在中间值的后面low移动到mid+1
else
high = mid - 1;
}
if(low <= high) //找到
return mid;
else //未找到
return -1;
}
int main(){
int r2, r1;
int x;
clock_t start;
int i;
srand(time(0)); //设置时间种子
for(i=0; i < numcnt; i++){
num[i] = i;
}
x = rand() % numcnt; // 随机一个需要查找的数
// 顺序查找
start = clock();
r1 = find_1(num[x]);
printf("查询结果:%d
", r1);
printf( "顺序查找-用时: %f ms
", (double)(clock() - start) );
// 折半查找:
start = clock();
r2 = find_2(num[x]);
printf("查询结果:%d
", r2);
printf( "折半查找-用时: %f ms
", (double)(clock() - start) );
return 0;
}