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

C語言數(shù)據(jù)結構中二分查找遞歸非遞歸實現(xiàn)并分析

 更新時間:2017年03月18日 09:43:43   作者:he_shuai20  
這篇文章主要介紹了C語言數(shù)據(jù)結構中二分查找遞歸非遞歸實現(xiàn)并分析的相關資料,需要的朋友可以參考下

C語言數(shù)據(jù)結構中二分查找遞歸非遞歸實現(xiàn)并分析

前言:

二分查找在有序數(shù)列的查找過程中算法復雜度低,并且效率很高。因此較為受我們追捧。其實二分查找算法,是一個很經(jīng)典的算法。但是呢,又容易寫錯。因為總是考慮不全邊界問題。

用非遞歸簡單分析一下,在編寫過程中,如果編寫的是以下的代碼:

#include<iostream>
#include<assert.h>
using namespace std;

int binaty_search(int* arr, size_t n, int x)
{ 
  assert(arr);
  int left = 0;
  int right = n - 1;

  while (left <= right)
  {
    int mid = (left + right) / 2;
    if (x < arr[mid])
    {
      right = mid-1;
    }
    else if (x > arr[mid])
    {
      left = mid+1;
    }
    else
    return mid;
  }
  return -1;
}

int main()
{
  int arr[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
  cout << binaty_search(arr, sizeof(arr) / sizeof(int), 0) << endl;
  cout << binaty_search(arr, sizeof(arr) / sizeof(int), 1) << endl;
  cout << binaty_search(arr, sizeof(arr) / sizeof(int), 2) << endl;
  cout << binaty_search(arr, sizeof(arr) / sizeof(int), 3) << endl;
  cout << binaty_search(arr, sizeof(arr) / sizeof(int), 4) << endl;
  cout << binaty_search(arr, sizeof(arr) / sizeof(int), 5) << endl;
  cout << binaty_search(arr, sizeof(arr) / sizeof(int), 6) << endl;
  cout << binaty_search(arr, sizeof(arr) / sizeof(int), 7) << endl;
  cout << binaty_search(arr, sizeof(arr) / sizeof(int), 8) << endl;
  cout << binaty_search(arr, sizeof(arr) / sizeof(int), 9) << endl;
  cout << binaty_search(arr, sizeof(arr) / sizeof(int), 10) << endl;
    return 0;
}

那么我們可以簡單分析一下:

如果是以下這樣的代碼實現(xiàn):

#include<iostream>
#include<assert.h>
using namespace std;

int binaty_search(int* arr, size_t n, int x)
{
  assert(arr);
  int left = 0;
  int right = n;

  while (left < right)
  {
    int mid = (left + right) / 2;
    if (x < arr[mid])
    {
      right = mid;
    }
    else if (x > arr[mid])
    {
      left = mid + 1;
    }
    else
      return mid;
  }
  return -1;
}
int main()
{
  int arr[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
  cout << binaty_search(arr, sizeof(arr) / sizeof(int), 0) << endl;
  cout << binaty_search(arr, sizeof(arr) / sizeof(int), 1) << endl;
  cout << binaty_search(arr, sizeof(arr) / sizeof(int), 2) << endl;
  cout << binaty_search(arr, sizeof(arr) / sizeof(int), 3) << endl;
  cout << binaty_search(arr, sizeof(arr) / sizeof(int), 4) << endl;
  cout << binaty_search(arr, sizeof(arr) / sizeof(int), 5) << endl;
  cout << binaty_search(arr, sizeof(arr) / sizeof(int), 6) << endl;
  cout << binaty_search(arr, sizeof(arr) / sizeof(int), 7) << endl;
  cout << binaty_search(arr, sizeof(arr) / sizeof(int), 8) << endl;
  cout << binaty_search(arr, sizeof(arr) / sizeof(int), 9) << endl;
  cout << binaty_search(arr, sizeof(arr) / sizeof(int), 10) << endl;
    return 0;
}

那么可以簡單分析一下為:

同樣,遞歸實現(xiàn)的條件也分為兩種,我就只演示一種,代碼如下:

#include<iostream>
#include<assert.h>
using namespace std;

int binaty_srarch(int* arr, int x, int left, int right)
{
  assert(arr);
  int mid;
  if (left <= right)
  {
    mid = (left + right) / 2;
    if (arr[mid] == x)
    {
      return mid;
    }
    else
    if (x < arr[mid])
    {
      return binaty_srarch(arr, x, left, right - 1);
    }
    else if (x>arr[mid])
    {
      return binaty_srarch(arr, x, left + 1, right);
    }
  }
  return -1;
}

int main()
{
  int arr[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
  cout << binaty_srarch(arr, 0, 0, (sizeof(arr) / sizeof(int)) - 1) << endl;
  cout << binaty_srarch(arr, 1, 0, (sizeof(arr) / sizeof(int)) - 1) << endl;
  cout << binaty_srarch(arr, 2, 0, (sizeof(arr) / sizeof(int)) - 1) << endl;
  cout << binaty_srarch(arr, 3, 0, (sizeof(arr) / sizeof(int)) - 1) << endl;
  cout << binaty_srarch(arr, 4, 0, (sizeof(arr) / sizeof(int)) - 1) << endl;
  cout << binaty_srarch(arr, 5, 0, (sizeof(arr) / sizeof(int)) - 1) << endl;
  cout << binaty_srarch(arr, 6, 0, (sizeof(arr) / sizeof(int)) - 1) << endl;
  cout << binaty_srarch(arr, 7, 0, (sizeof(arr) / sizeof(int)) - 1) << endl;
  cout << binaty_srarch(arr, 8, 0, (sizeof(arr) / sizeof(int)) - 1) << endl;
  cout << binaty_srarch(arr, 9, 0, (sizeof(arr) / sizeof(int)) - 1) << endl;
  cout << binaty_srarch(arr, 10, 0, (sizeof(arr) / sizeof(int)) - 1) << endl;

  return 0;
}

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關文章

  • C語言轉義字符實例詳解

    C語言轉義字符實例詳解

    這里主要介紹了C語言的轉義字符的知識,并附有示例代碼,以便理解,希望對學習 C語言的同學有所幫助
    2016-07-07
  • 用C語言實現(xiàn)貪吃蛇小游戲

    用C語言實現(xiàn)貪吃蛇小游戲

    這篇文章主要為大家詳細介紹了用C語言實現(xiàn)貪吃蛇小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • VC小技巧匯總之5則實用小技巧

    VC小技巧匯總之5則實用小技巧

    這篇文章主要介紹了VC小技巧匯總之5則實用小技巧,需要的朋友可以參考下
    2014-07-07
  • Qt中網(wǎng)絡編程的實現(xiàn)

    Qt中網(wǎng)絡編程的實現(xiàn)

    本文主要介紹了Qt中網(wǎng)絡編程的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-02-02
  • Qt編寫地圖實現(xiàn)省市區(qū)域圖的示例代碼

    Qt編寫地圖實現(xiàn)省市區(qū)域圖的示例代碼

    本文主要介紹了Qt編寫地圖實現(xiàn)省市區(qū)域圖的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 解析C++無鎖隊列的實現(xiàn)代碼

    解析C++無鎖隊列的實現(xiàn)代碼

    本篇文章是對C++無鎖隊列的實現(xiàn)進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言實現(xiàn)惡作劇關機程序

    C語言實現(xiàn)惡作劇關機程序

    大家好,本篇文章主要講的是C語言實現(xiàn)惡作劇關機程序,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • C語言實現(xiàn)發(fā)送郵件功能

    C語言實現(xiàn)發(fā)送郵件功能

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)發(fā)送郵件功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C語言編程C++柔性數(shù)組結構示例講解

    C語言編程C++柔性數(shù)組結構示例講解

    這篇文章主要介紹了C語言編程系列中的柔性數(shù)組,文中含有詳細的示例代碼講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-09-09
  • 利用C語言實現(xiàn)掃雷游戲

    利用C語言實現(xiàn)掃雷游戲

    這篇文章主要為大家詳細介紹了利用C語言實現(xiàn)掃雷游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08

最新評論