二分查找key值是否在排序数组中
2014-05-27 11:46
405 查看
//二分查找 //查找一个排序后的数组Arr中是否含有元素Key //若有,则返回Key在数组中的下标;若无,则返回-1 #include "stdafx.h" //这个函数有问题,用主函数现在的设置做测试,发现会死循环 //最后High=7,Low=6,Mid=6 //而(Key > Arr[MidIndex])永久成立,因为Low==Mid,所以下标不会被修正 //事实上,这个Key不存在于数组中 int BinarySearchInSortedArr_error(const int* Arr, const int Len, int Key) { int Low = 0; int High = Len - 1; int MidIndex = (High + Low) / 2; while (Low < High) { if (Key == Arr[MidIndex]) { return MidIndex; } if (Key > Arr[MidIndex]) { Low = MidIndex; } else { High = MidIndex; } MidIndex = (High + Low) / 2; } return -1; } int _tmain(int argc, _TCHAR* argv[]) { int Arr[10] = {-5,-2,-1,0,2,4,5,8,10,15}; int SearchResult = 0; int x = 7; SearchResult = BinarySearchInSortedArr_error(Arr,10,x); if (-1 != SearchResult) { if (Arr[SearchResult] == x) { printf("Successfully!"); } } return 0; }
//二分查找
//查找一个排序后的数组Arr中是否含有元素Key
//若有,则返回Key在数组中的下标;若无,则返回-1
#include "stdafx.h"
//这个函数是正确的
//错误的函数(BinarySearchInSortedArr-error)对于Low和High的修正有漏洞
//因为当(Key > Arr[MidIndex])成立时,已经确定Key比Arr[MidIndex]大,则搜索应该从Mid之后开始
int BinarySearchInSortedArr(const int* Arr, const int Len, int Key)
{
int Low = 0;
int High = Len - 1;
int MidIndex = (High + Low) / 2;//注意取中值是High+Low,不是减
while (Low <= High) //等于的情况也要考虑
{
if (Key == Arr[MidIndex])
{
return MidIndex;
}
if (Key > Arr[MidIndex])
{
Low = MidIndex + 1;//注意,Low改变的时候要Mid+1
}
else
{
High = MidIndex - 1;//而High改变的时候要Mid-1,这样才可能出现Low>High终止循环
}
MidIndex = (High + Low) / 2;
}
return -1;
}
int _tmain(int argc, _TCHAR* argv[])
{
int Arr[10] = {-5,-2,-1,0,2,4,5,8,10,15};
int SearchResult = 0;
int x = 7;
SearchResult = BinarySearchInSortedArr(Arr,10,x);
if (-1 != SearchResult)
{
if (Arr[SearchResult] == x)
{
printf("Successfully!");
}
}
return 0;
}
相关文章推荐
- 【php数组函数序列】之array_key_exists() - 查找数组键名是否存在
- 例题3-8 使用whle循环和折半法查找一个整数是否在一个排序的int类型数组中
- 程序员面试题目总结--数组(二)【二分查找、找出给定数字出现次数、两个有序整型数组交集、找出数组中唯一的重复元素、判断数组中的数值是否连续相邻】
- 剑指offer——面试题38:数字在排序数组中出现的次数(利用二分查找来找第一次和最后一次的位置)
- 二分查找的一个题---找出排序数组中绝对值最小的数
- php 查找数组中是否存在某个元素或者key
- 【c语言】二维数组中的查找,杨氏矩阵在一个二维数组中,每行都按照从左到右的递增的顺序排序,输入这样的一个数组和一个数,判断数组中是否包含这个数
- C语言实现 二分查找数组中的Key值(递归和非递归)
- 黑马程序员_Java基础_04数组main函数args详解、数组排序、二分查找实例
- Java数组遍历、求最大值、选择排序、冒泡排序、二分查找
- 九度OJ 1349 数字在排序数组中出现的次数 -- 二分查找
- 判断一个数是否存在一个数组中,二分查找
- 数组 获取最值(最大值 最小值)选择排序 冒泡排序 快速排序 半查找(二分查找) 十进制转其他进制法
- 在排序的数组中二分查找一个元素,返回在数组中它第一次出现的位置
- 使用while循环和折半法查找一个整数是否在一个排序的int类型数组中
- 二分查找String[]是否有存在的key值
- 二分查找-两已排序数组中找中位数二题
- (算法:二分查找)在排序数组中,找出给定数字出现的次数
- LeetCode-Find Minimum in Rotated Sorted Array II-旋转排序数组找最小-二分查找
- 数组排序、求最值、二分查找