1. 程式人生 > >二分查詢的思想和實現

二分查詢的思想和實現

二分查詢:
1.只適用於一組有序數,雜亂無序的數是不能使用二分法查詢的
2.思想:根據你查詢的數來判斷查詢前半段還是後半段

/*
 =======================================================
 Name        : halfSearch.c
 Author      : fzl
 Version     :
 Copyright   : Your copyright notice
 ========================================================
 */

#include <stdio.h>
#include <stdlib.h> /* arr陣列, len陣列長度, data待查詢數, 返回找到的下標 */ int hSearch(const int *arr, const int len, const int data) { int low = 0; /* 最小邊界 */ int high = len - 1; /* 最大邊界 */ int mid = 0; /* 中界 */ int c = 1; while (low <= high) { printf("第%d次\n", c++); mid = (high + low) / 2
; /* 2分取中 */ if(arr[mid] == data) { return mid; /* 找到, 返回下標*/ } else if(arr[mid] > data) { high = mid - 1;/* 最大邊界縮小到 中間-1*/ } else { low = mid + 1;/* 最小邊界縮小到 中間+1*/ } } return
-1; /* 沒找到 返回-1 */ } int main(int argc, char *argv[]) { int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int find = 9; printf("a[%d] = %d\n", hSearch(a, sizeof(a) / sizeof(int), find), find); return EXIT_SUCCESS; }