折半查找
编程思路:折半排序 就是将一个有序的数组,输入一个数,找这个数所对应的下标位置、
折半听上去就是说一半一半,对。就是这个样子,折半就是将元素的最小下标赋值给一个low 最大下标赋值给high
在定义一个mid变量,mid变量用来定义中间指向的位置。
第一次判断的时候,先去判断这个m是否小于a[mid]这个元素,小于的话说明 这个范围就在0-mid之间 将高下标
赋值mid-1 一次判断下面的。如果是大于的m>a[mid] 说明这个范围是在mid-a[higt]之间 将小下标low = mid+1
这样就可以找到对应的数的下标。
#include<stdio.h>
#define N 10
/*
折半查找:
编程思路:折半排序 就是将一个有序的数组,输入一个数,找这个数所对应的下标位置、
折半听上去就是说一半一半,对。就是这个样子,折半就是将元素的最小下标赋值给一个low 最大下标赋值给high
在定义一个mid变量,mid变量用来定义中间指向的位置。
第一次判断的时候,先去判断这个m是否小于a[mid]这个元素,小于的话说明 这个范围就在0-mid之间 将高下标
赋值mid-1 一次判断下面的。如果是大于的m>a[mid] 说明这个范围是在mid-a[higt]之间 将小下标low = mid+1
这样就可以找到对应的数的下标。
**/
void main(){
void print(int a[],int n);
int a [N] = {1,2,3,4,5,6,7,8,9,10};
print(a,N);
int m = 0,low = 0,high = N-1,mid = 0,k = -1;
printf("输入查找的元素:");
scanf("%d",&m);
while(low<=high){
mid = (low+high/2);
if(m<a[mid])
high = mid-1;
else
if(m>a[mid])
low = mid+1;
else{
k = mid;
break;
}
}
printf("元素下标为%d\n",k);
}
void print(int a[],int n){
for(int i=0;i<n;i++){
if(i%5==0)
printf("\n");
printf("%d\t",a[i]);
}
}