簡體   English   中英

在C中實現二進制搜索時需要幫助

[英]Need help in implementing a binary search in C

由於我不希望我的代碼被班上其他人復制的原因而將其刪除。

您只需將偽代碼轉換為代碼即可。 我會給你一些更完善的偽代碼:

1)將我們正在尋找的東西的最小可能位置( min )設置為零。

2)將我們正在尋找的東西的最大可能位置( max )設置為可能的最高位置。

3)將位置loc計算為(min+max)/2

4)檢查loc保存了我們要查找的對象。 如果是這樣,停下來,我們找到了。

5)檢查min>=max 如果是這樣,請停止,它不在這里。

5)如果loc處的對象太高,請將max設置為loc-1 (因為最大位置可能比loc ,因為loc太高。)

6)如果loc處的對象太低,請將min設置為loc+1 (相同的邏輯,反之亦然。)

7)轉到步驟3。

SOLN;

unsigned char  search(int value, int array[], int n)
{
  int start = 0;
  int end = n;
  int mid;

  // We ll exit the while loop if we just started overlapping 
  while(start<=end)
  {
    // Calculating the new mid point
    // Can also be written as mid = (start + end)/2;
    mid = start + (end-start)/2;
    if(value == array[mid])
      return 1;

    // If value is less we search on the left side
    if(value < array[mid])
      end = mid - 1;
    else
      start = mid + 1;
  }
  return 0;
}

您在那里有算法。 只需從兩個索引值開始-低和高。 將它們初始設置為數組中的第一個和最后一個條目。

接下來,在高點和低點之間選擇一個(整數)值。 探測該數組元素。 如果它等於期望值,那么就完成了。 如果低於/小於/早於所需值,則將“低”設置為探頭元素索引+1。 如果它大於/大於/大於期望值,則將“高”設置為探頭元素索引-1。 然后返回(在您的while循環中)並選擇一個新的“中途”值。

如果到達從低到高的位置(在while條件下檢查),則找不到該值。

(我要補充一點,該算法基本上很簡單,但是如果您認為效果不佳並嘗試采用一些捷徑,則可能會令人沮喪。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM