欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言實現(xiàn)折半查找法(二分法)

 更新時間:2020年11月01日 12:27:01   作者:_MaL  
這篇文章主要為大家詳細介紹了C語言實現(xiàn)折半查找法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

折半查找法也叫做二分查找,顧名思義,就是把數(shù)據(jù)分成兩半,再判斷所查找的key在哪一半中,再重復(fù)上述步驟知道找到目標(biāo)key;

注意:折半查找法僅適用于對已有順序的數(shù)組、數(shù)據(jù)進行操作?。?!

很顯然,折半查找法相對于其他查找方法例如順序查找法效率要高很多;

下面我們來實際操作一下,了解二分查找的奧義。

例如:要在數(shù)組arr[]={8,7,9,6,4,1,2,5,3,10,11};中查找key=7的位置;首先,我們要先將數(shù)組arr中的數(shù)據(jù)成員進行排序。arr[]={1,2,3,4,5,6,7,8,9,10,11};

如圖所示:將該組數(shù)據(jù)小端記作low,大端記作high,中間值記作mid;
二分法查找時,將所查找的key與mid比較,例如key=7,即可縮小查找范圍在mid和high之間;

如圖所示即可找到key=low=7;

注意: (敲黑板)如果中間數(shù)mid不是整數(shù),需要進行取整。

代碼如下:

#include<stdio.h>
int BinSearch(int arr[],int len,int key)             //折半查找法(二分法)
{
 int low=0;             //定義初始最小
 int high=len-1;         //定義初始最大
 int mid;              //定義中間值
 while(low<=high)
 {
 mid=(low+high)/2;       //找中間值
 if(key==arr[mid])        //判斷min與key是否2020111122411718相等
  return mid;  
 else if(key>arr[mid])       //如果key>mid 則新區(qū)間為[mid+1,high]
  low=mid+1;
 else                    //如果key<mid 則新區(qū)間為[low,mid-1]
  high=mid-1;
 }
 return -1;               //如果數(shù)組中無目標(biāo)值key,則返回 -1 ;
}
int main()
{
 int arr[]={1,2,3,4,5,6,7,8,9,10,11};           //首先要對數(shù)組arr進行排序
 printf("%d \n",BinSearch(arr,(sizeof(arr)/sizeof(arr[0])),7));
 return 0;
}

運行結(jié)果如下:

希望對您有所幫助!

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • c語言printf函數(shù)的使用詳解

    c語言printf函數(shù)的使用詳解

    本篇文章是對c語言中printf函數(shù)的使用進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言進階教程之字符串&內(nèi)存函數(shù)

    C語言進階教程之字符串&內(nèi)存函數(shù)

    對于字符,在計算機內(nèi)部都是用數(shù)字(字符編碼)來表示的,而字符串是“字符連續(xù)排列”的一種表現(xiàn),這篇文章主要給大家介紹了關(guān)于C語言進階教程之字符串&內(nèi)存函數(shù)的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • c++實現(xiàn)簡單的線程池

    c++實現(xiàn)簡單的線程池

    這里給大家介紹了C++中對于pthread線程的一個簡單應(yīng)用以及使用繼承CDoit,實現(xiàn)其中的start和end,有需要的小伙伴可以參考下
    2015-11-11
  • 詳解C++函數(shù)模板與分離編譯模式

    詳解C++函數(shù)模板與分離編譯模式

    這篇文章主要介紹了詳解C++函數(shù)模板與分離編譯模式的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下
    2020-08-08
  • C++實現(xiàn)歸并排序(MergeSort)

    C++實現(xiàn)歸并排序(MergeSort)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)歸并排序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C++對string進行大小寫轉(zhuǎn)換操作方法

    C++對string進行大小寫轉(zhuǎn)換操作方法

    這篇文章主要介紹了C++對string進行大小寫轉(zhuǎn)換操作方法,本文通過兩種方法結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-02-02
  • C語言鏈表與單鏈表詳解

    C語言鏈表與單鏈表詳解

    鏈表是一種物理存儲結(jié)構(gòu)上非連續(xù)、非順序的存儲結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次序?qū)崿F(xiàn)的,本章帶你詳細了解鏈表與單鏈表
    2022-02-02
  • C++中隱式類型轉(zhuǎn)換學(xué)習(xí)筆記

    C++中隱式類型轉(zhuǎn)換學(xué)習(xí)筆記

    在本篇文章里小編給大家整理的是一篇關(guān)于C++中隱式類型轉(zhuǎn)換學(xué)習(xí)筆記內(nèi)容,有興趣的跟著小編來學(xué)習(xí)下吧。
    2020-02-02
  • C語言函數(shù)棧幀的創(chuàng)建與銷毀詳解

    C語言函數(shù)棧幀的創(chuàng)建與銷毀詳解

    函數(shù)棧幀(stack frame)就是函數(shù)調(diào)用過程中在程序的調(diào)用棧(call stack)所開辟的空間,下面這篇文章主要給大家介紹了關(guān)于C語言函數(shù)棧幀的創(chuàng)建與銷毀的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-09-09
  • Qt利用QState狀態(tài)機實現(xiàn)控件互斥操作詳解

    Qt利用QState狀態(tài)機實現(xiàn)控件互斥操作詳解

    這篇文章主要為大家詳細介紹了Qt如何利用QState狀態(tài)機實現(xiàn)控件互斥操作,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-12-12

最新評論