二分查找--循环数组找最小值

#include<iostream>
using namespace std;
int main()
{
int arr[] = {5,6,7,8,9,1,2,3,4};
int left = 0, right = 8;
cout<<"循环有序数组arr[]={";
for(int i = 0; i < 9; i++)
if(i != 8)
cout<<arr[i]<<",";
else
cout<<arr[i]<<"}"<<endl;
while(left <= right)
{
int mid = left + (right - left) >> 1;
if(arr[left] < arr[right])
{
cout<<"最小值为:"<<arr[left]<<endl;
return 0;
}
else
{
if(arr[left] > arr[mid])
{
right = mid - 1;
}
else if(arr[mid] > right)
{
left = mid + 1;
}
else
{
int minn = arr[left];
for(int i = left + 1; i < right ; i++)
if(arr[i] < minn)
{
minn = arr[i];
}
cout<<"最小值为:"<<minn<<endl;
return 0;
}

原文地址:https://blog.51cto.com/14472348/2474985

时间: 2024-11-06 23:10:53

二分查找--循环数组找最小值的相关文章

查找旋转数组的最小值

查找旋转数组的最小值: 假设一个排序数组以某个未知元素为支点做了旋转,找出旋转后数组中的最小值,假定数组中没有重复元素. 如:原数组1,2,3,4,5,6,7旋转后得到4,5,6,7,1,2,3.旋转后的最小值为1. 问题分析: 这里不做过多的介绍,旋转之后的数组实际上可以划分为两个有序的数组,前面子数组的大小大于后面子数组的大小. 最小的元素就是两个数组的分界线. 程序实现: 1 /*************************************** 2 FileName FindM

[C++]LeetCode: 118 Find Peak Element (二分查找 寻找数组局部峰值)

题目: A peak element is an element that is greater than its neighbors. Given an input array where num[i] ≠ num[i+1], find a peak element and return its index. The array may contain multiple peaks, in that case return the index to any one of the peaks i

java——类型转换,冒泡排序,选择排序,二分查找,数组的翻转

一.类型转换 p { margin-bottom: 0.25cm; direction: ltr; color: #000000; line-height: 120%; text-align: justify; widows: 0; orphans: 0 } p.western { font-family: "Calibri", sans-serif; font-size: 10pt } p.cjk { font-family: "宋体"; font-size: 1

经典算法二分查找循环实现Java版

二分查找 定义 二分查找(Binary Search)又称折半查找,它是一种效率较高的查找方法. 要求 (1)必须采用顺序存储结构 (2)必须按关键字大小有序排列 查找思路 首先将给定值K,与表中中间位置元素的关键字比较,若相等,返回该元素的存储位置:若不等,这所需查找的元素只能在中间数据以外的前半部分或后半部分中.然后在缩小的范围中继续进行同样的查找.如此反复直到找到为止. 适用情况 该查找方法仅适合于线性表的顺序存储结构,不适合链式存储结构,且要求元素按关键字有序排列. 优缺点 虽然二分查找

python 三维数组找最小值

#声明三维数组 num=[[[33,45,67],[23,71,66],[55,38,66]], [[21,9,15],[38,69,18],[90,101,89]]] value=num[0][0][0]#设置main为num数组的第一个元素 for i in range(2): for j in range(3): for k in range(3): if(value>=num[i][j][k]): value=num[i][j][k] #利用三重循环找出最小值 print("最小值

二分查找有序数组

昨天百度面试,问了这样一道题: 对于一个有序字符串数组,用二分法查找某一字符串是否存在于该字符串数组中.函数原型为: bool BinarySearch(const vector<string>& array, const string& target) 注意这里的有序指的是字典序,如字符串数组 a, ab, ac, bc, cd, d 就是有序字符串数组,而 a, b, ab 及 a, ac, ab 都不是有序字符串数组.   对于这道题,一种很笨的做法是: 1 #inclu

二分查找和数组合并

/** * 数组合并 */ public static int[] arrayMerge(int[] a, int[] b){ int[] c = new int[a.length + b.length]; int k=0,j=0,i=0; while (k< a.length && j <b.length){ if (a[k] <= b[j]){ c[i] = a[k]; k++; } else { c[i] = b[j]; j++; } i++; } if (k ==

[剑指Offer]53-在排序数组中查找数字(二分查找)

题目一 数字在排序数组中出现的个数 题目描述 统计一个数字在排序数组中出现的次数. 解决思路 写两个二分查找分别找第一个和最后一个该数字,然后可直接出计算有几个该数字.时间复杂度为O(logn). 这里使用二分查找的递归写法,形式可以写得更简洁(见书). 当输入不符合规则返回-1.注意形参len表示原始数组的长度,在此题目中是必要的.注意特殊输入的处理. 代码 #include <iostream> using namespace std; int findFirstK(int* num,in

算法:两种方式(递归/循环)实现二分查找

程序由Golang实现,代码如下: 1.使用递归实现二分查找 //使用递归进行二分查找 func binarySearchTest() { //二分查找的数组必须是已经排好序的 nums := []int{1, 3, 5, 6, 7, 10, 12, 15, 17, 18, 19, 20, 21} value := 2 var index int = searchIndex(nums, value) fmt.Println("index:", index) } //在nums中查找元素