#define _CRT_SECURE_NO_WARNINGS 1 #includeint main() { int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; //这里arr这个数组我们并不知道它有多少个元素。 int k = 7; int sz = sizeof(arr) / sizeof(arr[0]); // arr数组占的总空间/arr数组中一个元素所占的空间 // ==这个arr数组中元素的个数。 int left = 0;//这个是数组arr的最左边的元素的下标。 int right = sz - 1; //这个是数组arr的最右边的元素的下标。 //因为1-10的下标分别是0-9(下标是从0开始的), //所以用总数减去1. while (left <= right) { int mid = (left + right) / 2;//中间下标也需要不断的循环变换, //这个mid所表示的数是数组各个元素下标 //所以应该用下标来求,不应该用数组中元素的总个数来求。 if (arr[mid] < k)//(k=7) {//arr[mid] < k 说明这个数比7小,在有序的数组中 //小的数在左边,越小越靠左。大的数在右边,越大越靠右。 left = mid + 1; } else if (arr[mid] > k) { right = mid - 1; } else { printf("找到了,该元素坐标为:%dn",mid); //最后是体现在中间坐标上的 break; //在while循环中要看看有没有需要使用break来跳出循环的地方 } } if (left > right) { printf("没找到n"); } return 0; }



