#include <stdlib.h>
#include <time.h>
#define N 20
void Sort(int a[],int n) {
int i,j,k,t
for(i = 0 i < n - 1 ++i) {
k = i
for(j = i + 1 j < n ++j) {
if(a[k] > a[j]) k = j
}
if(i != k) {
t = a[k]
a[k] = a[i]
a[i] = t
}
}
}
int Find(int a[],int n,int x) {
int low = 0,high = n - 1,mid
while(low <= high) {
mid = (low + high)/2
if(x == a[mid]) return mid
else if(x > a[mid]) low = mid + 1
else high = mid - 1
}
return -1
}
void Show(int a[],int n) {
int i
for(i = 0 i < n ++i) {
printf("%d ",a[i])
}
printf("\n")
}
int main() {
int a[20],i,x,res
srand((unsigned)time(NULL))
for(i = 0 i < N ++i)
a[i] = rand()%N // 每个数都在1 -- 100之间
Show(a,N)
Sort(a,N)
Show(a,N)
x = rand()%100 + 1
res = Find(a,N,x)
if(res >= 0) printf("数值%d的下标为%d。\n",a[res],res)
else printf("数列中没有找到数值%d。\n",x)
return 0
}
查找的意义是在一堆数据中,使用方法找到你想要找的数据。一般为分:顺序和折半(又叫二分)查找两种方法。
存放在数组中的数据就可以看成一堆数据,在有限数组内存放一些数据,通过使用查找方法进行查找想要找的数。
顺序方法:这种查找方法不需要数组排序,数据可以是无序的。从数组开头向后一个一个与被查找数进行比较,如果找到就做相应的操作(如输出这个数的下标或位置)等。
折半查找法:(二分查找)
前提需要把数组里的数据进行排序(升序或降序)。思路是(假设数组已按升序排序)每次只比较中间的数据(一段距离内),第一次先和中间的数组(下标是这个数组中在中间的)比较,如果相同,则说明被找数已找到。否则就要判断是在大于还是小于:如果是大于,那么就将在中间+1至最后一个数之间的中间数再进行比较。否则就将在第一个至中间-1的数进行比较;再次重复比较,直到找到数为止。
#include<stdio.h>int main()
{
int i,res,a[10]={1,4,7,10,13,16,19,22,25,28}
printf("请输入要查找的数:")
scanf("%d",&res)
for(i=0i<10i++)
if(a[i]==res)
break
if(i>=10)
printf("没有要查找元素\n")
else if(i<10)
printf("%d在数组中的位置为:%d,即第%d个数\n",res,i,i+1)
return 0
}
代码时正确的。。。