二分搜索之C++实现

二分搜索之C++实现

一、源代码:BinarySearch.cpp

 1 #include<iostream>
 2 using namespace std;
 3
 4 /*定义输出一维数组的函数*/
 5 void print(int array[], int n)
 6 {
 7     for (int i = 0; i < n; i++)
 8     {
 9         cout << array[i] << " ";
10     }
11     cout << endl;
12 }
13
14 /*定义二分搜索的函数:array,有序序列;n,序列长度;x,要查找的数*/
15 int binarySearch(int array[], int n, int x)
16 {
17     //初始化左右边界
18     int left = 0, right = n - 1;
19     //当左右边界不重合时
20     while (left <= right)
21     {
22         //初始化边界的中点
23         int middle = (left + right) / 2;
24         //判断所查找元素和当前中点元素是否相等,如果相等则返回中点元素所在的位置
25         if (x == array[middle])
26         {
27             return middle;
28         }
29         else if (x > array[middle])
30         {
31             //如果所查找元素大于中点元素,则所查找元素在右部分,则将左边界向右移
32             left = middle + 1;
33         }
34         else{
35             //说明所查找元素小于中点元素,则所查找元素在做部分,则将右边界向左移
36             right = middle - 1;
37         }
38     }
39     //如果找不到,则返回-1
40     return -1;
41 }
42 int main()
43 {
44     //定义待排序的一维数组
45     int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
46     //输出原始数组
47     cout << "原始数组是:" << endl;
48     print(array, 10);
49     //定义要查找的数
50     int number;
51     //输入要查找的数
52     cout << "请输入要查找的数:";
53     cin >> number;
54     //调用二分搜索的函数进行查找
55     int location = binarySearch(array, 10, number);
56     if (location > 0)
57     {
58         //说明找到了
59         cout << number << "在该序列中,是第" << (location + 1) << "个数" << endl;
60     }
61     else
62     {
63         //说明没找到
64         cout << number << "不在该序列中..." << endl;
65
66     }
67     return 0;
68 }

二、运行效果

在序列中

不在序列中

时间: 2024-10-27 01:56:50

二分搜索之C++实现的相关文章

HDU 2199 Can you solve this equation?(二分搜索)

题目链接 Problem Description Now,given the equation 8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 == Y,can you find its solution between 0 and 100;Now please try your lucky. Input The first line of the input contains an integer T(1<=T<=100) which means the number of

北大ACM2456——Aggressive cows~~二分搜索

这一题,也是简单的二分搜索,求解放置的牛之间的距离尽可能远,也就是最大化最小值. 主要的一步就是将第i头牛放在了x[j]的位置中,第i + 1 头牛就要放在满足x[j] + d < x [k],k的最小值. 下面是AC的代码: #include <iostream> #include <algorithm> using namespace std; int N, M; int X[100005]; bool C(int x) { int last = 0; for(int i

【贪心专题】POJ 3258 River Hopscotch (最大化最小值 贪心+二分搜索)

链接:click here~~ [题意] 一条河长度为 L,河的起点(Start)和终点(End)分别有2块石头,S到E的距离就是L,河中有n块石头,每块石头到S都有唯一的距离,,现在要你移除其中的m块,使得具有最小间距的相邻两块石头之间的距离最大. [解题思路] 又是一道经典的二分搜索,跟前一道一样的思路,不过要注意的是:此题是移除其中的元素,从而达到最大化的最小值. 代码: #include <stdio.h> #include <string.h> #include <

NYOJ306 走迷宫(dfs+二分搜索)

题目描述 http://acm.nyist.net/JudgeOnline/problem.php?pid=306 Dr.Kong设计的机器人卡多非常爱玩,它常常偷偷跑出实验室,在某个游乐场玩之不疲.这天卡多又跑出来了,在SJTL游乐场玩个不停,坐完碰碰车,又玩滑滑梯,这时卡多又走入一个迷宫.整个迷宫是用一个N * N的方阵给出,方阵中单元格中填充了一个整数,表示走到这个位置的难度. 这个迷宫可以向上走,向下走,向右走,向左走,但是不能穿越对角线.走迷宫的取胜规则很有意思,看谁能更快地找到一条路

[LeetCode] Largest BST Subtree 最大的二分搜索子树

Given a binary tree, find the largest subtree which is a Binary Search Tree (BST), where largest means subtree with largest number of nodes in it. Note:A subtree must include all of its descendants.Here's an example: 10 / 5 15 / \ \ 1 8 7 The Largest

POJ 1064 1759 3484 3061 (二分搜索)

POJ 1064 题意 有N条绳子,它们长度分别为Li.如果从它们中切割出K条长度相同的绳子的话,这K条绳子每条最长能有多长?答案保留小数点后2位. 思路 二分搜索.这里要注意精度问题,代码中有详细说明:还有printf的%.2f会四舍五入的,需要*100再取整以截取小数点后两位. #include<stdio.h> #include<string.h> #include<string> #include<iostream> #include<math

K Best(最大化平均数)_二分搜索

Description Demy has n jewels. Each of her jewels has some value vi and weight wi. Since her husband John got broke after recent financial crises, Demy has decided to sell some jewels. She has decided that she would keep k best jewels for herself. Sh

二分搜索

// CodeForces 600B//二分搜索 时间复杂度为O(log n)#include<stdio.h> #include<string.h> #include<stdlib.h> #include<ctype.h> #include<math.h> #include<algorithm> using namespace std; #define N 200100 #define INF 0x3f3f3f3f int a[N]

九章算法第二天,二分搜索

二分搜索分两类,一类可以直接看出来是二分搜索 另一类很难直接看出来是二分搜索, 最重要的是理解二分搜索的思想, 根据有序集合这个特性,每次通过O(1)的时间复杂度 ,使得搜索的规模减半, 同红黑树查找类似(红黑树也是在增加了空间复杂度的情况下,减少了时间复杂度,每次比较,然后就会使得搜索规模减半) 九章讲的二分模板,我觉得比较好,这样在写代码的时候 不会犯错 造成死循环 ,而且可以处理两个整数相加溢出的问题 ------------ public class Solution { /** * @