二分查找的一个题---找出排序数组中绝对值最小的数

来源:互联网 发布:网络推广这工作靠谱吗 编辑:程序博客网 时间:2024/05/25 23:27
有一个已经排序的数组,数组中可能有正数、负数或0,求数组中元素的绝对值最小的数,要求,不能用顺序比较的方法(复杂度需要小于O(n)),可以使用任何语言实现,例如,数组{ -9, -6, -5, -4, -2, 3, 5, 9, 10 },绝对值最小的是-2。
这一题该如何求呢?

思路:直接用二分法进行查找,判断依据是比较a[left]和a[right]的绝对值,然后更新mid。


具体代码如下:


// FindleastABSofNumber.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<math.h>#include<iostream>using namespace std;int FindLeastABSofNumber(int *a, int start, int end){int left;int right;int mid;left = start;right = end;while (left < right){mid = left + (right - left) / 2;if (a[mid] == 0)return a[mid];else if (a[mid]>0){right = mid;}else{left = mid;}if (right - left == 1){return abs(a[left]) < abs(a[right]) ? a[left] : a[right];//}}}int _tmain(int argc, _TCHAR* argv[]){int a[] = { -9, -6, -5, -4, -2, 3, 5, 9, 10 };int length = sizeof(a) / sizeof(int);int smallofABS=FindLeastABSofNumber(a, 0,length-1);cout << "数组中绝对值最小的数为:" << smallofABS<<endl;return 0;}




具体代码如下:

0 0
原创粉丝点击