折半查找算法
来源:互联网 发布:大数据怎么快速学 编辑:程序博客网 时间:2024/06/06 17:00
在学习C语言过程中肯定会遇到查找与排序的相关知识,今天又对C语言中的折半查找法又回顾了一遍,其实发现以前的理解还是存在一定的问题的,于是就把今天的所得记录一下。
以下是代码:
//折半查找法#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>//数组作为参数求大小int Count_array(int arr[]){int *p;int count = 0;p = arr;while ((*p)!=-1){count++;p++;}return count;}int bin_search(int arr[], int num ,int n){int left = 0;int right = n - 1;int mid = 0;while (left <= right){int mid = (right - left) / 2 + left; //或者写成(right + left )/2if (num > arr[mid]){left = mid +1;}else if (num <arr[mid]){right = mid -1;}else{return mid + 1;}}return -1;}int main(){int array_num[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };int arr_size = sizeof(array_num)/sizeof(array_num[0]);int m = 0;int number = 0;printf("请输入您要查找的数字!\n");scanf("%d", &number);m = bin_search( array_num, number, arr_size);if (m != -1){printf("您要找的数在数组中的下标是:%d\n", m);}else{printf("Sorry!您输入的数字未找到 \n");}return 0;}
在折半查找中最关键的就是中值得取法,写成Mid = (Left+Right)/2也可以,但是其中会牵扯到一个关于溢出的问题,若Left与Right都比较大,可能会出现关于溢出的问题,那么Mid的表示可能会出现问题。所以最稳妥的方式还是写成Mid = (Right - Left)/2 + Left 的形式。
还有一点就是while循环中要写成Left<=Right,当然也可以写Left<Right,但是这样的话,下面的代码可能会有小小的变化。若要写成Left<Right
可以参考以下代码:
int left = 0;int right = n - 1;int mid = 0;while (left < right){int mid = (right - left) / 2 + left;if (num < arr[mid]){right = mid - 1;}else if (num > arr[mid]){left = mid + 1;}else{return mid + 1;}}if (left == right){return left + 1;}else{return -1;}积少成多,水滴石穿。每天记录学习内容,那么离成功就会越来越近!
1 0
- 查找算法 折半查找算法
- 折半查找算法示例
- 折半查找算法实现
- 算法-折半查找
- 折半查找算法
- 折半查找算法
- 算法:折半查找法
- 折半查找算法
- 折半查找算法
- 验证折半查找算法
- 验证折半查找算法
- 验证折半查找算法
- 折半查找(递归算法)
- 关于折半查找算法
- 折半查找算法
- [算法]折半查找
- 折半查找算法
- java折半查找算法
- qt :-1: 错误:cannot open output file debug\test2.exe: Permission denied 类似错误
- spring--注解
- secure CRT 登陆虚拟机中ubuntu 12详解
- HDU 题目分类
- 基于FPGA的多目标图像跟踪技术
- 折半查找算法
- TCP的三次握手(建立连接)和四次挥手(关闭连接)
- HTML 作业
- 事务基本概念
- Java中MD5算法的实现
- 网络基础:子网掩码划分1
- Java中Map的遍历方式
- 配置SQL Server数据库连接
- gdb编译完成后找不到函数