一,先排序
#define iop 5//可以改数组范围
//排序函数
int main() {
int a[iop] = {};
int i = 0;
for (i = 0; i < iop; i++) {
scanf("%d",&a[i]);
}
for (i = 0; i <iop-1; i++) {
for (int j = 0; j < iop-1 - i; j++) {
if (a[j]> a[j + 1]) {
int c = a[j];
a[j] = a[j + 1];
a[j + 1] = c;
}
}
}
for (i = 0; i <=iop-1; i++) {
printf("%d ", a[i]);
}
二分查找只能在有序数组中进行
二,查找函数
①.紧跟排序函数
printf("\n输入要找的数\n");
int k = 0;//要找的数
int s = sizeof(a) / sizeof(a[0]);
scanf("%d", &k);
int qwe = erfen(a, k, s);
if (qwe == -1)
printf("没有\n");
else
printf("在a[%d]", qwe);
return 0;
}
②.查找函数的函数体
//二分函数
int erfen(int a[iop], int k, int s) {
int zuo = 0;
int you = s - 1;
while (zuo <= you) {
int g = zuo + (you - zuo) / 2;
if (a[g] < k) {
zuo = g + 1;
}
else if (a[g] > k) {
you = g - 1;
}
else {
return g;
}
}
return -1;
}
三,基本逻辑
在有序函数中,并去除掉结束语 ' \0 ',利用算数取出中间数下标 “g”,再与要查找的数 "k"(k不是下标) 作对比,如果小于被查数 “k”,则需要将左边界下标更换为与中间数右相邻数下标 "g+1",反之如果大于,则更换为中间数左相邻数下标 "g-1"。
一次劈开一半,直到找到被查数。