经过上一篇的冒泡排序算法,可以将无序的数组排列整齐,在此基础上,在一个数组里面找一个元素变得方便起来,不用循环遍历数组去找元素了,用二分查找变得简单起来,想必大家都玩过猜数字游戏1~100之间,假如说你说一个数字23,主持人说猜小了,你又说个24,主持人反手就是一个大比兜,这个里面就用到了二分法。
int arr1[10] = { 1,6,9,12,43,56,66,77,81,95 };
给出以上数组,10个元素,假如说要找的数字是81,他的下标是8。
假如要找的数字是6,他的下标是1
假如说要找的是7,数组中没有该元素
根据上面图示分析,代码如下
int main() { int a; scanf_s("%d", &a);//要查找的数字 int arr1[10] = { 1,6,9,12,43,56,66,77,81,95 };被查找的数组 int sz = sizeof(arr1) / sizeof(arr1[0]);求数组长度 int left = 0; int right = sz - 1; int mid = (left + right) / 2; while (left < right) { if (a > arr1[mid])//对应第一张图 { left = mid + 1; mid = (left + right) / 2; } else if (a<arr1[mid])//对应第二张图 { right = mid-1; mid = (left + right) / 2; } else if (a == arr1[mid])//对应每张图中最后找到元素的情况 { printf("找到了,下标是%d", mid); break; } } if (left >= right)//对应最后一张图没找到 { printf("没找到\n"); } }
结果展示
对应已经排好序的数组用此方法(二分查找)比较方便,希望可以帮助到大家,如果有不对的地方,请大佬们指教,谢谢大家了