三、折半查詢函式
四、總結
給定 n 個整數和 k 個待查詢的整數 m_1, m_2, …, m_k。如果待查詢的整數在給定的 n 個整數中,請輸出待查詢的整數是陣列中第幾個元素(從 1 開始計算,第乙個元素計 1 而不是 0);
如果待查詢的整數不在給定的 n 個整數中,則輸出 0。
第一行輸入兩個整數 n (1 ≤ n ≤106)和 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
輸出 13 1
1 4 6
4
2
輸入 2
輸出 25 2
1 4 6 7 8
5 1
0 1
輸入 3
輸出 36 4
1 2 4 6 7 8
9 1 5 2
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 注意 咳咳,敲黑板 折半查詢法僅適用於對已有順序的陣列 資料進行操作!很顯然,折半查詢法相對於其他查詢方法例如順序查詢法效率要高很多 下面我們來實際操作一下,了解二分查詢的奧義。...