c語言實現二分查詢法程式碼
阿新 • • 發佈:2021-12-23
二分查詢
也稱為折半查詢
是一種比較高效的查詢方法
但是,它有個前提
就是
查詢的序列一定要是有序的
查詢的序列一定要是有序的
查詢的序列一定要是有序的
.
.
.
程式碼測試
#include <stdio.h> // 二分查詢法 bool search_key(int *src, int size, int key) { int low = 0; // 起始位置 int high = size - 1; // 結束位置 int mid = (low + high) / 2; // 中間位置 int count = 0; // 查詢花費的次數 while (low < high) { ++count; mid = (low + high) / 2; if (key < src[mid]) { if (key == src[low]) { // 找到啦 printf("查詢 %d 成功!\t位置是 src[%d] = %d, \t共查詢 %d 次\n", src[low], low, src[low], count); return true; } high = mid - 1; } else if (key > src[mid]) { if (key == src[high]) { // 找到啦 printf("查詢 %d 成功!\t位置是 src[%d] = %d, \t共查詢 %d 次\n", src[high], high, src[high], count); return true; } low = mid + 1; } else if (key == src[mid]) { // 找到啦 printf("查詢 %d 成功!\t位置是 src[%d] = %d, \t共查詢 %d 次,\n", src[mid], mid, src[mid], count); return true; } } printf("查詢完畢!未能找到相對應的值!\n"); return false; } // 主函式 int main(int argc, char **argv) { int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; search_key(arr, sizeof(arr) / sizeof(int), 0); search_key(arr, sizeof(arr) / sizeof(int), 1); search_key(arr, sizeof(arr) / sizeof(int), 2); search_key(arr, sizeof(arr) / sizeof(int), 3); search_key(arr, sizeof(arr) / sizeof(int), 4); search_key(arr, sizeof(arr) / sizeof(int), 5); search_key(arr, sizeof(arr) / sizeof(int), 6); search_key(arr, sizeof(arr) / sizeof(int), 7); search_key(arr, sizeof(arr) / sizeof(int), 8); search_key(arr, sizeof(arr) / sizeof(int), 9); search_key(arr, sizeof(arr) / sizeof(int), 10); return 0; }
除錯結果
可以看到,最少查詢 1 次,最多查詢 3 次
可見比遍歷要高效的多
_End
完事兒
本文來自部落格園,作者:拾荒荒,轉載請註明原文連結:https://www.cnblogs.com/lvvou/p/15724379.html