这部分是函数调用错误和数组错误总结
当时写的二分法查数组位置,用函数调用二分法,给大家看一下我的错误调用方式,我直接把定义的函数名整体粘贴复制用,后来改了也是带着int 哈哈. (错误示范)
void bin_search(int arr[], int left, int right, int key);
正确写法如下,这样调用才正确.
bin_search(arr,left,right,key);
顺便给大家介绍一下二分法查数组位置
这个方法是确定左右位置,通过重复取中方式来减小范围,锁定要搜寻的数值,然后打印位置下标.
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int bin_search(int arr[], int left, int right, int key);
// arr 是查找的数组
//left 数组的左下标
//right 数组的右下标
//key 要查找的数字
int main()
{
int arr[9] = { 1, 3, 5, 7, 9, 54, 23, 87, 12 };
int right = sizeof(arr) / sizeof(arr[0]) - 1;
int left = arr[0];
int key;
scanf("%d", &key);
bin_search(arr,left,right,key);
return 0;
}
int bin_search(int arr[], int left, int right, int key)
{
int f = 0;
int mid = 0;
while (left <= right)
{
mid = (left + right) / 2;
if (arr[mid] > key)
{
right = mid - 1;
}
else if (arr[mid] < key)
{
left = mid + 1;
}
else
{
f = 1;
break;
}
}
if (f == 1)
{
printf("找到了,下标是%d\n", mid);
}
else
{
printf("找不到\n");
}
return 0;
}
在这过程中我也有个小错误,比如混淆了下标和值,导致运行出错.下面这种,明明是下标缩小范围,我把它写成arr[mid],变成数值没法缩小范围. (错误示范)
while (left <= right)
{
mid = (left + right) / 2;
if (arr[mid] > key)
{
right = arr[mid - 1];
}
else if (arr[mid] < key)
{
left = arr[mid + 1];
}
重复踩坑的就是数组的函数调用, (错误示范)
我这里想实现一个调用函数使定义的数组初始化为0, 一心想着像定义一样初始化数组就不停尝试下面这样初始化, (错误示范)
int arr[8] = {0};
但正确的方式下面是用赋值方式将所有元素赋值为0,来实现要求.,而且满足函数的 高内聚 ,低耦合 ,用int sz来求数组长,再去传数值, 应用函数再调用.
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8 };
int sz = sizeof(arr) / sizeof(arr[0]);
init(arr, sz);
print(arr, sz);
return 0;
}
void init(int arr[],int sz)
{
for (int i = 0; i < sz; i++)
{
arr[i] = 0;
}
}