#C语言#二分法查找有序数组

C语言的二分法,想必很多朋友都在初学时是一个难啃的骨头,因为这是必须掌握的最基础的一种算法。在这里我分享一下这个简单的#二分法#查找有序数组

#include<stdio.h>
int binary_search(int arr[],int key, int left, int right)
{

    while (left <= right)
    {
        int mid = left + (right - left) / 2;
        if (a[mid]<key)
        {
            left = mid + 1;
        }
        else if (a[mid]>key)
        {
            right = mid - 1;
        }
        else
        {
            return mid;
        }
    }
    return -1;
}
int main()
{
    int arr[] = { 1, 2, 3, 4,  5, 6, 7, 8, 9, 10 };
    int left = 0, right = sizeof(arr) / sizeof(arr[0]) - 1 ;//right是通过sizeof计算真个数组的大小,从而算出最左边的下标
    int ret, key;
    scanf("%d", &key);
    ret = binary_search(arr,key, left, right);
    if (-1 == ret)
    {
        printf("找不到");
    }
    else
    {
        printf("找到了,下标是%d", ret);
    }
    system("pause");
    return 0;
}

还有就是一个有关设置flag的程序,也在这给大家分享一下,也仅仅是实现正负符号的依次转换。

#include<iostream>
using namespace std;
void calculate()//计算
{
    int flag = 1;
    double s = 0,i;
    for (i = 1; i <= 100; i++){
        s = s +flag*(1 / i);
        flag = -flag;
    }
    cout << "1/1-1/2+1/3-1/4...+1/99-1/100=" << s << endl;
}
int main()
{
    calculate();
    system("pause");
    return 0;
}//这有些程序是通过c++的一些语法,在当时认为这种方式更简单,但还是希望大家从基础开始一步一步练习

这仅仅是初学C语言遇到一些比较频繁的代码
注:在这里给大家提一个建议,len=sizeof(arr)/sizeof(a[0])在哪里定义就在哪里使用(如在函数中int arr[]为指针大小为4个字节,而定义在主函数中则为数组大小,是因为形参为指针形式)

原文地址:https://blog.51cto.com/14232678/2370223

时间: 2024-08-29 20:57:55

#C语言#二分法查找有序数组的相关文章

二分法计算有序数组中数字出现的次数

1. 问题描述 在给定的一个已经排好序的数组中,找出指定数字出现的次数.例如数组[1,2,3,4,4,4,4,6,8,9]中4出现的次数为4次. 2. 思路与方法 此问题可以在二分法的基础上进行改进.假设数组a为递增的数列,需要查找的数字为num,可以分别查找num在数组a中出现的起始位置和最后一次的位置,通过二者的差计算出数字num在数组a中出现的次数. c++代码如下: #include <stdio.h> #include <iostream> #include <st

二分查找有序数组

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

二分法查找(数组元素无序)

问题描述: 一数组,含有一堆无序数据,首先将数据按顺序排列,再用二分法实现某个元素的查找,若找到,返回该元素在数组中的下表,否则,返回不存在提示信息. #include<stdio.h> #include<stdlib.h> int *bubble_sort(int a[],int n)//冒泡排序(将数据升序排列) { int i; int j; int tmp; for(j=0;j<n-1;++j)//n个元素需要排序n-1趟 { for(i=0;i<n-j-1;+

二分法查找(数组)php

二分查找法需要数组是一个有序的数组 假设我们的数组是一个递增的数组,首先我们需要找到数组的中间位置. 一.要知道中间位置就需要知道起始位置和结束位置,然后取出中间位置的值来和我们的值做对比. 二.如果中间值大于我们的给定值,说明我们的值在中间位置之前,此时需要再次二分,因为在中间之前,所以我们需要变的值是结束位置的值,此时结束位置的值应该是我们此时的中间位置. 三.反之,如果中间值小于我们给定的值,那么说明给定值在中间位置之后,此时需要再次将后一部分的值进行二分,因为在中间值之后,所以我们需要改

c语言二分法查找数组中一个数字的下标位置

int binary_search(int arr[], int k, int left, int right) { //int right = sizeof(arr) / sizeof(arr[0]) - 1;放在这里错误,arr是指针,长度为4个字节,right=0 while (left <= right) { int mid = left + (right - left) / 2;//每次都要改变,所以要循环 if (arr[mid] > k) { right = mid - 1; }

c语言》查找法-数组下标

1.查找某数下标 #include <stdio.h> int main(int argc, const char * argv[]) { int a[10]={3,2,0,4,5,8,9,7,6,1}; int a1; int i=0; printf("请输入数值:"); scanf("%d",&a1); for (; i<10; i++) { if (a[i]==a1) printf("%d",i); } retur

如何用二分法在有序数组中找到你想要的数字

//二分法的函数部分://将要找的数字与中间的数字进行比较,比较后将下标移动//比较部分是数字,改变部分是下标 #define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h> int Search(int arr[], int key,int left, int right){while (left <= right){int mid =left + (right-left) / 2;//中间下标的计算

用最小的内存和二分法查找数组中是否存在这个数

package Test; public class Test { //用最小的内存查找数组中是否存在这个数 public static void main(String[] args) { int [] arr = {12,2,3,4,5,6,7,8,90,76,43}; byte[] byt = new byte[100]; for (int i = 0; i < arr.length; i++) { byt[arr[i]] = 1; } int n = 13; if(byt[n] == 1

C语言编程 在整型有序数组中查找想要的数字并且返回下标

遇到"有序"数组中查找元素类的题,优先考虑折半查找(二分查找) 做法核心是利用所定义的下标left和right与mid(由计算得来)下标的比较来逐渐缩短查找范围,达到一个阈值后即为找到. 源代码如下: #include<stdio.h> #include<stdlib.h> int search(int a[], int x, int left, int right)//定义二分查找函数 { while (left <= right) { int mid