算法——二分查找算法
来源:互联网 发布:淘宝店铺未来发展趋势 编辑:程序博客网 时间:2024/06/05 20:16
从有序数组中查找需要数据
【引用】
算法——快速排序
【解决方案】
#include <stdio.h>#include <stdlib.h>#include <windows.h>// 递归二分查找int BinarySearch( int Array[], int start, int end, int Value ){ int index = start+(end-start+1)/2; Data[glbIndex] = Array[index]; glbIndex++; if( Array[index] == Value ) { return index; } else { if( index == start ) return -1; if( Array[index] > Value ) return BinarySearch( Array, start, index - 1, Value ); else return BinarySearch( Array, index + 1, end, Value ); }}// 获得随机的数void GenRandomData( int Array[], int Count ){ for( int i = 0; i < Count; i++ ) { Array[i] = rand() % 60; }}// 打印数组void printArray( int Array[], int Count ){ printf( "Array is:" ); for( int i = 0; i < Count; i++ ) { printf("%2d ", Array[i] ); } printf( "\n");}int main( int argc, char* argv[] ){ srand( GetTickCount() ); int Array[20] = {0}; GenRandomData( Array, 20 ); int index = rand() % 20; int Key1 = Array[index]; printArray( Array, 20 ); printf( "Key1: Before sort Array[%d]=%d \n", index, Array[index] ); glbIndex = 0; QSort( Array, 0, 19 ); int Key2 = Array[index]; printArray( Array, 20 ); printf( "Key2: After sort Array[%d]=%d \n", index, Array[index] ); int Index1 = BinarySearch( Array, 0, 19, Key1 ); // 判断是否查找成功 if( Array[Index1] == Key1 ) { printf( "Key1:%d find Suc in pos %d\n", Key1, Index1 ); } int Index2 = BinarySearch( Array, 0, 19, Key2 ); // 判断是否查找成功 if( Array[Index2] == Key2 ) { printf( "Key2:%d find Suc in pos %d\n", Key2, Index2 ); } return 0;}
测试结果:
如何去理解二分查找呢,就像以前有个节目猜商品价格,其实二分查找和这个就挺相似,整个价格从0到无穷是一个有序序列(当然实际商品是有个初略的大概范围的,假设3000 - 8000 )那么二分查找就是不断的取中间值,去进行判断,然后根据结果(高了还是低了),再一个更小的空间内继续查找。当然二分不一定是最有效率的,例如一种产品的价格区间是3000-8000之间,但是如果这个产品是最新出产,并且是知名品牌,那么估计中等偏上的时候的可以更加有效率。
所以当给二分添加一个变量进行调控的时候,就可以实现动态二分,这样就可以有更好的策略选择。
【返回】
算法——分类目录
0 0
- 算法——二分查找算法
- 算法之—二分查找算法
- 查找算法之——二分查找
- C查找算法——二分查找
- 算法——查找之二分查找
- 常见查找算法之—二分查找
- [算法]二分查找算法
- 算法----二分查找算法
- python算法之——二分查找
- 算法之旅——二分查找
- noj算法题——二分查找
- 经典算法——二分查找法
- 剑指Offer——二分查找算法
- 经典算法学习——二分查找
- java算法——二分查找
- ACM算法入门——二分查找
- 查找算法 二分查找
- 查找算法:二分查找
- Java入门学习记录2
- VB.NET的几种延时方法
- 调整内核printk的打印级别
- selenium监控回家火车票
- Linux常用命令
- 算法——二分查找算法
- DNA序列 UVA1368
- 最小二乘椭圆拟合matlab代码实现
- 北京天宇联科技有限责任公司-T语言开发平台前端开发指南
- Android Butterknife 8.4.0 使用方法总结
- 关于Activity切换动画
- 如何客制化Launcher的主菜单图标?
- 单击菜单自动调用扫一扫功能,遇到的问题和大家分享一下
- Xcode编程常用快捷键