學習記錄 實現折半查詢

2021-10-10 06:24:32 字數 1955 閱讀 8570

三、折半查詢函式

四、總結

給定 n 個整數和 k 個待查詢的整數 m_1, m_2, …, m_k。

如果待查詢的整數在給定的 n 個整數中,請輸出待查詢的整數是陣列中第幾個元素(從 1 開始計算,第乙個元素計 1 而不是 0);

如果待查詢的整數不在給定的 n 個整數中,則輸出 0。

第一行輸入兩個整數 n (1 ≤ n ≤10

6)和 k (1≤k≤10

6),分別表示給定的整數總個數和待查詢的數的個數;

第二行自小到大輸入 n 個整數 number (1≤number_i≤10) ,其中(1≤i≤n),每兩個整數之間用乙個空格隔開;

第三行輸入 k 個整數 number_j (1≤number_j≤10

6,其中 1≤j≤k),每兩個整數之間用乙個空格隔開。

輸出為一行,包括 kk 個部分,每個部分為待查詢的元素索引或 0,k 個部分之間用乙個空格分隔。輸出行尾不含多餘空格

輸入 1

3 1

1 4 6

4

輸出 1

2

輸入 2

5 2

1 4 6 7 8

5 1

輸出 2

0 1

輸入 3

6 4

1 2 4 6 7 8

9 1 5 2

輸出 3

0 1 0 2

實現折半查詢的函式,在有序數列查詢值的位置。

函式接收三個引數:陣列,陣列長度,查詢的值

函式定義三個變數:left,right,mid

思路:

1、直接判斷中間的值是否符合要求,是就結束查詢,否執行下列判斷

2、如果要查詢的數比中間的值大,放棄中間值左側所有值(公升序排列)

3、如果要查詢的數比中間的值小,放棄中間值右側所有值(公升序排列)

#include

intfind_half

(int array,

int n,

int f)

if(array[mid]

> f)

else

}return-1

;//不存輸出-1,索引加1等於0

}int

main()

for(j =

0; j < k; j++)}

return0;

}

1、求陣列長度len = sizeof(array) / sizeof(array[0])

2、反覆輸入輸出

#include

intmain

(void

)return0;

}

3、輸出行尾不包含多餘空格的處理 :j == 0 || printf(" ");

折半查詢 java實現

二分查詢又稱折半查詢,它是一種效率較高的查詢方法。二分查詢要求 1.必須採用順序儲存結構 2.必須按關鍵字大小有序排列。二分查詢又稱折半查詢,它是一種效率較高的查詢方法。二分查詢要求 1.必須採用順序儲存結構 2.必須按關鍵字大小有序排列。author administrator public cl...

折半查詢演算法實現

折半查詢是一種比較高效的查詢方式,其基本思想是 在某個有序表中,取出中間的記錄作為比較物件,如果要查詢記錄的關鍵碼等於中間記錄的關鍵碼,則查詢成功 若要查詢記錄的關鍵碼小於中間記錄的關鍵碼,則在中間記錄的左半區繼續查詢 若查詢記錄的關鍵碼大於中間記錄的關鍵碼,則在中間記錄的右半區繼續查詢。不斷重複上...

C 折半查詢的實現

折半查詢法也叫做二分查詢,顧名思義,就是把資料分成兩半,再判斷所查詢的key在哪一半中,再重複上述步驟知道找到目標key 注意 咳咳,敲黑板 折半查詢法僅適用於對已有順序的陣列 資料進行操作!很顯然,折半查詢法相對於其他查詢方法例如順序查詢法效率要高很多 下面我們來實際操作一下,了解二分查詢的奧義。...