#include <stdio.h>
int arr[] = {0,1,2,3,4,5,6,6,6,7,8,9,10};
int b = 6;
int find(int arr[], int n, int value)
{
int small = 0;
int big = n-1; //9
int mid = 0;
for (int i = 0; i < n; i++)
{
/*
0~9 4 arr[4]< 7
4~9 6 arr[6]< 7
6~9 7 arr[7]< 7
7~9 8 arr[8]= 7
*/
mid = (small + big) / 2; //4 7 7
printf("mid = %d\tarr[mid] = %d\n", mid, arr[mid]);
if (arr[mid] == value)
{
return mid;
}
else if (arr[mid] < value)
{
small = mid + 1; //5 6 7
}
else
{
big = mid - 1;
}
}
return 0;
}
int find2(int arr[], int size, int target)
{
int low = 0;
int hight = size - 1;
int mid = 0;
while (low <= hight)
{
mid = (low + hight) / 2;
printf("mid = %d\tarr[mid] = %d\n", mid, arr[mid]);
if (arr[mid] < target)
{
low = mid + 1; //5 6 7
}
else if(arr[mid] > target)
{
hight = mid - 1;
}
else
{
#if 0
/* 第一个重复的 */
if((mid == 0)||(arr[mid - 1] != target))
return mid;
else
hight = mid - 1;
#endif
#if 1
/* 最后一个重复的 */
if ((mid == size - 1) || (arr[mid + 1] != target))
return mid;
else
low = mid + 1;
#endif
}
}
}
int main()
{
printf("%d\n",find2(arr, 12, b));
return 0;
}
07-11
07-11
07-11
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交