【C/C++】折半查詢(二分查詢)
阿新 • • 發佈:2018-12-26
一、二分查詢
在C和C++裡,二分查詢是針對有序陣列所用的一種快速查詢元素的方法。二、二分查詢的條件以及優缺點
條件:針對有序陣列(元素從小到大或從大到小) 優點:查詢速度較快,時間複雜度為O(n) 缺點:有硬性條件的限制,而且即使查到後,插入與刪除困難。三、圖片詳解
四、二分查詢C語言程式碼塊(封裝後)
封裝函式解釋:
函式原型:binary_research(int arr[],int left , int right , int element) 函式功能:利用二分法查詢陣列元素 返回值 :若找到元素,返回元素陣列下標;否則,返回-1程式碼塊:
int binary_research(int arr[],int left,int right,int element) { while(left<=right) { int mid = (left+right)/2; if(arr[mid]>element) { right = mid - 1; } else if(arr[mid]<element) { left = mid + 1; } else { return mid; } } return -1; }
主函式程式碼塊:
int main() { int array[] = {1,2,3,4,5,6,7,8,9}; int right = <a target=_blank href="http://blog.csdn.net/qq_31828515/article/details/51646693">sizeof(array)/sizeof(array[0]) - 1</a>;//利用<a target=_blank href="http://blog.csdn.net/qq_31828515/article/details/51646693">sizeof</a>求陣列長度,-1後為右下標 int left = 0;//定義右下標並初始化為0 int element = 0;//定義查詢的元素並初始化為0 printf("請輸入要查詢的元素>"); scanf("%d",&element); int location = binary_research(array,left,right,element); if(location>=0) printf("The element's location is %d\n",location); else printf("Don't exit this element.\n"); return 0; }
五、小結
二分查詢對有序陣列來說查詢速度快。 優化: 可以用 int mid = left - (left - right)/2; //防止越界 或int mid = left&right+(left^right)>>1;//進行計算機最喜歡的位運算,效率略高
來代替 求兩個數的平均值的操作---------------->>>sizeof列印陣列元素
----------------------->>>深入預處理