二分法小記

2021-09-25 05:43:16 字數 2315 閱讀 4217

二分任務都有很多相似的地方,成為常考知識點:

思路:準備left=0,right=num,然後在while迴圈中更新left和right,while迴圈終止條件為left>right,這裡主要left=right也要考慮的,因為下面**更新的時候使用的是left = mid-1,和right = mid+1 mid已經考察,但是mid+1和mid-1作為邊界注意不要忘記考慮。

#includeusing namespace std;

void swap(int arr, int i, int j)

void insert_sort(int arr,int arr_len) }}

//二分查詢需要傳入乙個有序的陣列實現0(logn)時間複雜度的乙個查詢演算法

int bisearch(int arr, int arr_len, int target)

return int_min;//不存在返回系統最小值

}int main()

//sort(arr, arr + n);

insert_sort(arr,n);//先對陣列排序

for (int i = 0; i < n; ++i)

cout << arr[i]<

cout << endl;

cout<

如果在考試過程中排序過程直接使用algorithm中的sort(arr,arr+arr_len)排序就可以了,如果單獨考的話一般考其他排序方法,那麼對於小數量的排序最快的還是插入排序,在這裡也順帶複習一下;

插入排序就是從第乙個位置開始,只要後面的數比他前面的大就插入到他前面(交換),【比他前面大】理解為陣列當前元素前面所有元素,所有需要乙個變數從當前元素下標做減法一直減到陣列首元素去做比較。

**實現: 

void insert_sort(int arr,int arr_len)

}}

思路:從當前數的半數開始,利用二分的思路去配是否mid*mid=num,如果不滿足條件返回-1 

**實現:

int sqrt(int num) 

return -1;//最後不滿足條件返回-1

}

描述:求某個數開根號到1的步數,不能開根號減1再開,減1還不開繼續減

如:10, 10->9->3->2->1,需要4步

思路: 輸入乙個數,如果是1返回1次,否則利用乙個函式將num處理成能開根號為止,每處理一次然後res++(res為全域性變數),如果能開根號res++;

主函式如下:

int getsqrtnum(int num)
處理函式如下:二分法+遞迴

void process(int num) 

else if (mid*mid > num)

right = mid - 1;

else

left = mid + 1;

}//如果while都跑完了,說明開方失敗,res++,然後遞迴呼叫process(num-1)

res += 1;

return process(num - 1);

測試一下: 

#include#include#include#includeusing namespace std;

int res = 0;//全域性變數

void process(int num)

else if (mid*mid > num)

right = mid - 1;

else

left = mid + 1;

}//如果while都跑完了,說明開方失敗,res++,然後遞迴呼叫process(num-1)

C 二分法查詢,遞迴二分法

用二分法來求需要查詢的值.includeusing namespace std 查詢key元素是否存在 int findkey const int buf 100 const int ilen,const int key else right left mid 1 查詢失敗 return 1 查詢k...

python二分法查詢 Python 二分法查詢

二分法查詢主要的作用就是查詢元素 lst 1,3,5,7,12,36,68,79 資料集 百萬級資料 num int input 請輸入你要查詢的元素資訊 for el in lst if num el print 存在 break else print 不存在 len lst 0 1 2 3 4 ...

二分法,二分搜尋

二分法是乙個應用很廣泛的演算法 好吧,剛說出這句話的時候,我查了一下資料,發現我了解的應用寥寥無幾.ok,既然不知道,那就下次補充把。咱們直接進入主題。二分法 bisection method 是一種方程式根的近似值求法。演算法 若要求已知函式f x 0的值則 1.先找出乙個區間 a,b 使得f a...