国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - C語言算法--有序查找(折半查找/二分查找)

C語言算法--有序查找(折半查找/二分查找)

2021-12-22 14:27Aaronskr C/C++

我們知道無序查找只能靠遍歷,如果有序查找我們還挨個去遍歷,未免太浪費時間,所以這里我們會用到不一樣的方法,希望能給你帶來幫助

題目

首先我們來把題目瞅一眼:

在一個有序數組中查找具體的某個數字n。
編寫int binary_search (int x, int v[], int n);
功能:在v [0] <= v [1] <= v [2] <= …. <= v [n-1]的數組中查找x.

題目大概的意思就是說這是一串有序的數組,我們編寫代碼完成以下功能:如果輸入的數字在數組中,就輸出找到了并輸出下標,如果輸入的數字不在數組中則輸出找不到。

下面看解法:

解法一: 挨個遍歷

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
int main()
{
    int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
    //查找7
    //遍歷 0 ~ sz - 1
    int sz = sizeof(arr) / sizeof(arr[0]);
    int i = 0;
    int flag = 0;//0表示沒有找到
    for (i = 0; i < sz; i++)
    {
        if(7 == arr[i])
        {
            flag = 1;
            break;
        }
    }
    if (1 == flag)
        printf("找到了,下標是:%d\n", i);
    else
        printf("沒找到\n");
    return 0;
}

博主這里的代碼為了讓大家可以看的更清楚,所以沒有寫成輸入的模式,而是直接想要查找7。

這是萬能的方法,就挨個遍歷,有就是有,沒有就是沒有,屬實牛批,但缺點是太費時間,如果要查找1 - 10000000中的10000000,那未免也太久了,既然這樣的數組是一串有序的數組,不妨我們可以試試二分查找/折半查找。

方法二:折半查找/二分查找(僅適用于有序查找)

方法分析:

下面分析一下折半查找是怎么實現的,比如我們的數組是1 - 10,想要查找的數是7,那我們知道下標為0的數組對于1,下標為9的數組對于10,那我們則應該先找到中間下標對應的元素arr[mid],讓他和7比較,如果比7大,則將最右邊的下標賦值為mid - 1,反之,則將最左邊下標賦值為mid + 1,這樣循環往復無限逼近要查找的數,每次排查一半,直到arr[mid] == 7,就找到了,如果直到最左下標和最右下標重合之后都找不到,那這個數一定不在這個有序數組內。

下面我們看代碼是怎么寫的:

代碼實現:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h>
int main()
{
    int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
    //查找7
    //0 ~ sz - 1
    int sz = sizeof (arr) / sizeof (arr[0]);
    int left = 0;
    int right = sz - 1;
    int mid = 0;
    int k = 7;//要查找的元素
    int flag = 0;
    while(left <= right) // 即使是 left == right,也有一個元素需要被查找
    {
        //求中間元素下標
        mid = (left + right) / 2; // 每一次二分查找都要求出新的中間元素下標
        if(arr[mid] < k)
        {
            left = mid + 1;
        }
        else if (arr[mid] > k)
        {
            right = mid - 1;
        }
        else
        {
            //找到了
            flag = 1;
            break;
        }
    }
    if (1 == flag)
        printf("找到了,下標是:%d\n", mid);
    else
        printf("找不到\n");
    return 0;
}

雖然折半查找看起來代碼比遍歷查找多一些,但其實中間省了非常多計算機計算的時間,非常好用~~

總結

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關注服務器之家的更多內容!

原文鏈接:https://blog.csdn.net/Aaron_skr/article/details/119873642

延伸 · 閱讀

精彩推薦
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
主站蜘蛛池模板: 国产高清一区二区 | 一区二区三区高清视频在线观看 | 久久久久国产精品午夜一区 | 国产精品中文字幕在线观看 | 亚洲国产综合在线 | 成人精品 | 成av在线| 在线观看日韩av | 久久av一区 | 免费成年人视频在线观看 | 成人亚州 | 欧美成人精品一区二区 | av免费在线观看网站 | 成人影院www在线观看 | 欧美日韩在线一区二区 | 91精品在线播放 | 日本高清视频在线播放 | 欧美九九九| 亚洲欧美视频二区 | 91在线精品一区二区 | 伊人五月婷婷 | 青草成人免费视频 | 国产高清av在线一区二区三区 | 黄免费看 | 日韩精品一区二区三区四区五区 | 黄色在线免费看 | 18av网站 | 日韩一区在线视频 | 九热精品视频 | 国产精品久久久久久久久图文区 | 青青久久北条麻妃 | 香蕉尹人网| 在线日韩欧美 | 91亚洲国产成人久久精品网站 | 色噜噜视频在线观看 | 久久久免费网站 | 中文字幕色 | 黄色在线观看网站 | 色www精品视频在线观看 | 99精品欧美一区二区蜜桃免费 | 午夜精 |