二分查詢模板總結(遞迴與迴圈遍歷兩個版本)
阿新 • • 發佈:2019-01-23
二分查詢:
思路:
在有序*陣列***a[]中查詢K
1,不斷分割 。
2 用中間值去比較。
====================嘗試比較下面兩種,得到遞迴函式的寫法=========
【遞迴版本】
int BinSerch2(int a[], int k ,int left ,int right){ int mid = (left + right) / 2;//1.不斷分割 if (left <= right) //遞迴迴圈的條件以及出口 { if (a[mid] == k)//遞迴的迴圈體 位於遞迴之前,所以從由外到裡操作 { return mid; } else if (k < a[mid]) //遞迴的迴圈 { BinSerch2(a, k, left, mid - 1); } else{//遞迴的迴圈 BinSerch2(a, k, mid + 1, right); } } else{ return -1; } }
【非遞迴版本】
迴圈函式體主要包括兩個部分
1、分割
2、3種查詢條件判斷
//二分查詢 在陣列a[]中查詢K 1,不斷分割 。2 用中間值去比較。 int BinSerch1(int a[] ,int k){ int left = 0, right = 11; while (left <right ) //迴圈條件 { int mid = (left + right) / 2;//1.不斷分割 if (a[mid] == k)//找到了 查詢的三種情況 { return mid; } else if ( k < a[mid]) // { right = mid - 1; } else{ left = mid + 1; } } return -1; }