C程式設計實現了“半折搜尋”的過程。

發布 科技 2024-02-05
5個回答
  1. 匿名使用者2024-01-25

    #include

    int main()

    int i, j, n, k=0, isfound=0;

    int num[15] = ;測試陣列。

    printf("請輸出乙個整數:");

    scanf("%d", &n);

    i = (int)15/2;位移量。

    j = (int)15/2;以“指標”的數量為例。

    while(k<2)

    i = (int)i/2;

    if(i == 0) k++;i==0 表示當它對折不再摺疊時,仍然有最後的比較,所以 k 用作計數。

    如果沒有,則計算下乙個迴圈指標的位置。

    if(nnum[j])

    j = j - i + 1);

    elseisfound = 1;

    break;如果找到相等的數字,則表示已找到標記並退出迴圈。

    輸出結果。 if(isfound)

    printf("此數字是陣列中 %d 元素的值", j);

    elseprintf("沒有這樣的數字! ");

    return 0;

  2. 匿名使用者2024-01-24

    VC 執行。

    函式 10void f10()。

    int i,j,n=15,m=0;

    float a[15],k;

    printf("這個函式是:將 15 個數字按從小到大的順序輸入到乙個陣列中。 輸入任意數字並使用半折搜尋方法(在半折中查詢)找到陣列中的位置。 如果不是,則輸出為“不在陣列中”。");

    printf("請從小到大輸入15位數字:");

    for(i=0;i<15;i++)

    scanf("%f",&a[i]);

    printf("請輸入任意數字:");

    scanf("%f",&k);

    printf("輸出為:");

    j=n/2;

    for(i=1;m==0;i++)

    if(ka[n-1])

    m=1; printf("該數字不在其陣列中");}else if(j<0||j>(n-1))m=1; printf("該數字不在其陣列中");}else if(k==a[j])

    m=1;printf("此數字是陣列中的 %d 元素",j+1);}else if(ka[n/2])

    j++;system("pause...");

    對不起,我的錯了。

  3. 匿名使用者2024-01-23

    例如,排序後的資料為 1 5 12 35 64 78 89 123 456

    如果要求12,先用12與上半部分9個數字中間的12<64進行比較,這樣你要找的資料就在前半部分,即1 5 12 35 64,然後用12和上半部分的中間數字(12)進行比較, 所以你可以在 2 次搜尋後找到它。

    半折搜尋的目的是提高搜尋效率!

  4. 匿名使用者2024-01-22

    假設有 n 個數字被跟蹤公升序(這是關鍵! 返回組)。把它放在乙個一維陣列之前,如何找到你想要的數字?

    顧名思義,二分法將一段數字分成兩半。

    你想數進去它已經按公升序排列了將案例與中位數進行比較時,有 4 種情況:

    為什麼發現數字x小於中間數後設定left=mid+1和right=mid-1??它不能是 left=mid 和 right=mid?

    這涉及到如果有兩個中位數(例如,圖中第乙個迴圈的中位數是 ),那麼系統將自動選擇它們的數字用作中間數字 (21)。

    然後,當需要檢索時是最後的數字,最後只剩下兩個邊界,所以不管怎麼錯過橙子的中間數,左右邊界的範圍都不會改變,左邊的邊界仍然是左邊的邊界。 而你需要檢索的數字是右邊的邊界,即使這個數字確實大於中間的數字,但是由於演算法的原因,中間的數字永遠不會是正確的邊界,所以永遠找不到右邊邊界上的數字。

    但是,如果設定為 left=mid+1 和 right=mid-1,則可以使左邊框 = 右邊框,中間數等於該數字,以便進行比較並找到它。

  5. 匿名使用者2024-01-21

    演算法思路:二進位搜尋的搜尋過程是首先確定搜尋記錄所在的範圍(間隔),然後逐漸縮小範圍,直到找到記錄或找不到記錄為止。

    步驟如下:比較x和a之間的中間元素a[mid],如果x=a[mid],則x在l中的位置為mid;

    如果 x,如果 x>a[mid],則 x 在 a[mid] 之後。

    無論您查詢哪個部分,該方法都與在 A 中查詢 X 相同,但搜尋的大小減小了。 這說明,這個問題滿足了實行分而治之的第三個條件。

相關回答
14個回答2024-02-05

在 C 中,可以通過定義累加器(變數)並將其與 for 迴圈組合來計算 1 到 100 的總和。 >>>More

5個回答2024-02-05

<>2.接下來,定義乙個大數字。

3.然後將數字轉換為字串並用逗號分隔。 >>>More

12個回答2024-02-05

如下:

型別 1:僅結構定義: >>>More

12個回答2024-02-05

VS,C++格式。

#include >>>More

8個回答2024-02-05

九十九乘法表有 9 行 9 列,重點是 for 迴圈。 >>>More