在一个有序数组中查找具体的某个数字——二分法——函数法
2018-03-16 00:33
357 查看
(1)#include<string.h>
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int left = 0;
int right = sizeof(arr) / sizeof(arr[0])-1;
int mid = 0;
int key = 11;
while (left <= right)
{
mid = (left + right) / 2;
if (arr[mid] > key)
{
right = mid - 1;
}
else if (arr[mid] < key)
{
left = mid + 1;
}
else
{
break;
}
}
if (left <= right)
{
printf("下标是%d\n", mid);
}
else
{
printf("找不到\n");
}
system("pause");
return 0;
}
(2)函数法
指针变量字节数
32位计算机——4个字节
64位计算机——8个字节
例:#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main()
{
char a = "c";
int b = 12;
short c = 10;
long d = 1;
double e = 1.0;
char *pa = &a;
int *pb = &b;
short *pc = &c;
long *pd = &d;
double *pe = &e;
printf("%d", sizeof(pa)); //4
printf("%d", sizeof(pb)); //4
printf("%d", sizeof(pc)); //4
printf("%d", sizeof(pd)); //4
printf("%d", sizeof(pe)); //4
system("pause");
return 0;
}
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int left = 0;
int right = sizeof(arr) / sizeof(arr[0])-1;
int mid = 0;
int key = 11;
while (left <= right)
{
mid = (left + right) / 2;
if (arr[mid] > key)
{
right = mid - 1;
}
else if (arr[mid] < key)
{
left = mid + 1;
}
else
{
break;
}
}
if (left <= right)
{
printf("下标是%d\n", mid);
}
else
{
printf("找不到\n");
}
system("pause");
return 0;
}
(2)函数法
指针变量字节数
32位计算机——4个字节
64位计算机——8个字节
例:#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main()
{
char a = "c";
int b = 12;
short c = 10;
long d = 1;
double e = 1.0;
char *pa = &a;
int *pb = &b;
short *pc = &c;
long *pd = &d;
double *pe = &e;
printf("%d", sizeof(pa)); //4
printf("%d", sizeof(pb)); //4
printf("%d", sizeof(pc)); //4
printf("%d", sizeof(pd)); //4
printf("%d", sizeof(pe)); //4
system("pause");
return 0;
}
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> int binary_search(int arr[], int key, int temp) { int left = 0; int right = temp - 1; while (left <= right) { int mid = (left + right) / 2; if (arr[mid] < key) { left = mid + 1; } else if (arr[mid]>key) { right = mid - 1; } else { return mid; } if (left > right) { return -1; } } } int main() { int key; int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; scanf("%d", &key); int temp = sizeof(arr) / sizeof(arr[0]); //数组的长度传不到函数 int res = binary_search(arr, key, temp); //数组传参是首元素地址,需要在外面求得,传到函数里面 if (res == -1) { printf("找不到\n"); } else { printf("找到了下标是%d", res); } system("pause"); return 0; }如有错误,请指正
相关文章推荐
- 折半查找------在一个升序的有序数组中查找某个具体的数字
- 折半查找------在一个升序的有序数组中查找某个具体的数字
- 设计一个模板类Sample,用于对一个有序数组采用二分法查找元素下标
- 查找一个有序数组中的一个元素——二分法
- 递增有序数组中,查找某一个数字的位置
- python实现:使用二分查找,查找有序数组中,一个数字最后出现的下标
- 二分法实现一个整形有序数组的二分查找
- 【C语言】折半查找----在一个游戏数组中查找具体的数字n。
- 利用二分法查找一个数字在数组中的位置
- 输入连续有序数组,数组中有一个数字丢失,二分查找
- 定义数组为有序数组模型,并利用二分法进行查找,删除特定值(缺点:只能删除一个值,若有相同的值,则删除第一个)
- 在有序递增数组中查找一个缺少的数字
- 二分法在有序数组中查找一个数
- 输入一个有序数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字
- 在一个二维有序数组中,查找指定的数据是否存在
- 给定一个经过一次旋转的有序数组,从中查找一个值,若存在返回它的索引,不存在返回-1,假定数组存在重复元素
- 二维有序数组查找数字
- 一个有序数组(包含重复的),去除重复的数字然后输出
- 输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。
- 剑指offer中在一个有序数组中找出和为s的两个数字