#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> int search(int a[], int n, int num) { int top = 0; int bottom = n - 1; int half = (top + bottom) / 2; while (top <= half) { printf("这一次查找的数,top=%d,half=%d,bottom=%d ",top,half,bottom); if (a[half] == num) { return num;//成功找到 } else if (a[half] > num) { bottom = half - 1; half = (top + bottom) / 2; } else { top = half + 1; half = (top + bottom) / 2; } } return -1;//表示未找到 } void main() { int num[64]; time_t tms; srand((unsigned int)(time(&tms))); for (int i = 0; i < 64; i++) { num[i] = rand() % 100; //printf("%d ", num[i]); } for (int i = 0; i < 64 - 1; i++)//为随机生成的数组排序 { for (int j = 0; j < 64 - 1 - i; j++) { if (num[j]>num[j + 1]) { int tmp = num[j]; num[j] = num[j + 1]; num[j + 1] = tmp; } } } for (int i = 0; i < 64; i++)//打印出排序后的数组 { printf("%d ", num[i]); } int x = 0; scanf("%d", &x); int result = search(num, 64, x); if (result == -1) { printf(" 未找到%d", x); } else { printf("找到了%d", x); } system("pause"); }
代码很简单,下面就说下思路吧。。。
首先就是先生成一组随机数,然后用冒泡排序将数组排序
然后每次比较中间的数和要查找的数,要查的数大,那就在下面那一坨里找,反之同理
恩,也没啥要说的了,这个确实太简单了,思路一般小学生就能掌握了。。。。