查找:通常使用顺序查找和二分法。
顺序查找:从第一个开始查找,往后依次推。
二分查找:从中间数开始查找,再通过对比。如果所需找的数比中间数大,则在中间数的后面找,如果比中间数小,则从中间的数的前面找,依次反复查找。(前提是数列按照从小到大排序)
对于小规模查找,顺序查找思维逻辑简单,代码简单。二分法则思维逻辑相对复杂,代码也复杂。
对于大规模查找,顺序查找运算量相对大,二分法运算量小,并且运算快。
例如:在数组{1,2,3,4,5,6,7,8,9}中找出数字7是第几个数。
顺序查找:先判断第一个数是不是7,如果不是则判断下一个数。
二分法:先判断中间的数是不是7,如果不是,就与中间的数5比较,比5大,则在5后面的数查找,在数列{6,7,8,9}当中再找中间数,进行比较。
代码如下:顺序查找
#include<stdio.h>
int main(){
int n,i,flog=0;//flog表示是第几位数
int a[10]={1,2,3,4,5,6,7,8,9};
printf("请输入你要查找的数:");
scanf("%d",&n);
for(i=0;i<10;i++){
if(n==a[i])flog=i+1;
}
if(i==0)printf("没有你要查找的数");
else printf("%d是地%d个数",n,flog);
return 0;
}
二分查找
#include<stdio.h>
int main() {
int a[10] = { 1,2,3,4,5,6,7,8,9 };
int n, i;
int mid, max = 8, min = 0;//分别表示中间数的下标,最大值的小标,最小值的小标。
printf("请输入你要查找的数:");
scanf("%d", &n);
while (max >= min) {
mid = (max + min) / 2;
if (n > a[mid])min = mid + 1;//如果查找的数比中间数大,则从中间数后面,再次找中间数
if (n < a[mid])max = mid - 1;//如果查找的数比中间数小,则从中间数前面,再次找中间数
if (n == a[mid]) {
printf("%d是第%d个数", n, mid + 1);
break;
}
}
if (max < min)printf("没有查找的数");
return 0;
}
注意:二分法使用的前提是在按升序排序(或者降序)的一列数中使用。