算法之二分查找【C语言】
来源:互联网 发布:服务器网络加速 编辑:程序博客网 时间:2024/04/29 19:48
下面是递归的方法:
#include<stdio.h>int binary_search(int array[],int start_p,int end_p,int value){ int middle = -1; int position = -1; int tmp_position = -1; if(start_p < end_p) { middle = (start_p+end_p)/2; if(array[middle] == value) { position = middle; tmp_position = position - 1; while(tmp_position >=0 && array[tmp_position] == array[position]) { position = tmp_position; tmp_position --; } return position; } else if(array[middle] < value) { return binary_search(array, middle+1,end_p,value); } else if(array[middle] > value) { return binary_search(array, start_p, middle,value); } } else if(start_p == end_p) { if(array[start_p] == value) { position = start_p; tmp_position = position - 1; while(tmp_position >=0 && array[tmp_position] == array[position]) { position = tmp_position; tmp_position --; } return position; } else { return -1; } } if(start_p > end_p) { printf("Error: Start_p > End_p\n"); }}int main(){ int numbers[10] = {-5,-4,-3,-3,-1,0,1,1,3,4};//数字组 int search_number;//要查找的数字 int position = -1;//查找到的位置 printf("search number = "); scanf("%d",&search_number); position = binary_search(numbers,0,9,search_number); if(position!= -1) { printf("search success! position: %d.\n",position + 1); } else { printf("search fail! There is no such number.\n"); } return 0;}
二分法的最坏时间复杂度为O(lgn)。
用递归的方法来分析最坏时间复杂度:运行时间包括:1、一个子分支的运行时间,子分支的长度为原有分支的1/2;2、分解分支的时间;3、找到数据的时间。其中1的时间为T(n/2)【假设T为运行时间,n为原有分支的长度】;因为分解只是求中间位置,所以时间为O(1);找到数据的时间显然为O(1)。对于每一个分支来说,本身的运行时间为O(1)【包含分解、查找时间】,所以算法的最坏执行时间与分了几个分支有关系。对于长度为n,分支个数为lgn+1,所以最坏执行时间为O(lgn+1),简化后为O(lgn)。
- 算法之二分查找【C语言】
- c语言二分查找算法
- C语言之二分查找
- C语言实现二分查找算法
- C语言实现二分查找算法
- 【C语言】二分查找递归算法
- 二分查找算法的C语言实现
- c语言实现二分查找算法
- 用C语言实现二分查找算法
- C 语言学习之二分查找
- C语言排序之二分查找
- C语言-二分查找(折半查找)算法
- C语言实现折半查找(二分查找)的算法
- C语言:二分查找
- 【c语言】二分查找
- C语言 二分查找
- 二分查找 C语言
- 二分查找(C语言)
- input:-webkit-autofill 谷歌浏览器 修改input输入框的颜色
- c# arcgis 给map添加设备选择器
- 【Chrome】RSA算法在扩展程序中的运用
- retain和release倒底怎么玩?
- linux NAND驱动之一:内核中的NAND代码布局
- 算法之二分查找【C语言】
- Difference between MBCS and UTF-8 on Windows
- 没有学位,他通过以下四步进入Google
- Android程序中安装APP总结
- 进程的创建与可执行程序的加载
- Javascript执行效率小结
- NopCommerce架构分析之四----插件机制
- Android定时实现
- 利用LaTeX网页版向Blog中插入数学公式